- 使用validate进行校验输入
创建addUser.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>手动校验数据</title>
</head>
<body>
<%-- <jsp:include page="index.html"></jsp:include> --%>
<h4>添加联系人</h4>
<p />
<s:fielderror />
<s:form action="addUser" method="post">
<s:textfield label="联系人姓名" name="userName"></s:textfield>
<s:textfield label="联系人电话" name="userTelephone"></s:textfield>
<s:textfield label="联系人地址" name="userAddress"></s:textfield>
<s:submit value="提交" />
</s:form>
</body>
</html>
创建AddUserAction.java
package action;
import java.util.regex.Pattern;
import com.opensymphony.xwork2.ActionSupport;
public class AddUserAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1276235902279193389L;
private String userName;
private String userTelephone;
private String userAddress;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserTelephone() {
return userTelephone;
}
public void setUserTelephone(String userTelephone) {
this.userTelephone = userTelephone;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
/********************方法一 采用validateXxxx()方式进行校验*************************************/
public String add() {
return SUCCESS;
}
public void validateAdd(){
if(userName != null && !Pattern.matches("\\w{4,20}", userName.trim())){
addFieldError(userName, "validateAdd()方法被执行:姓名的长度不符合要求!");
}
}
/*********************方法二采用validate的方法进行校验************************************/
/*@Override
public void validate() {
if (userName == null || userName.length() < 4 || userName.length() > 20) {
addFieldError("userName", "姓名长度不符合要求");
}
if (userAddress == null || userAddress.length() < 7) {
addFieldError("userAddress", "地址长度不符合要求");
}
if (userTelephone == null || userTelephone.length() < 4) {
addFieldError("userTelephone", "电话长度不符合要求");
}
}*/
}
配置struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.i18n.encoding" value="utf-8" />
<constant name="struts.custom.i18n.resources" value="globalMessages" />
<package name="default" extends="struts-default">
<!-- 方法一需要指明method属性,方法二不需要 -->
<action name="addUser" class="action.AddUserAction" method="add">
<result name="success">/success.jsp</result>
<result name="input">/addUser.jsp</result>
</action>
</package>
</struts>
success.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>校验成功</title>
<style type="text/css">
<!--
body {
background-image: url(images/bg-0018.gif);
}
-->
</style>
</head>
<body >
<jsp:include page="index.html"></jsp:include>
<b>校验通过</b><br>
联系人姓名:<s:property value="userName"/><br>
联系人电话:<s:property value="userTelephone"/><br>
联系人地址:<s:property value="userAddress"/><br>
</body>
</html>
vaildate()方法中,如果系统发现有不合法的输入时,调用父类的addFieldError()方法记录一个fieldError错误。当流程进入execute()方法之前,系统会检查有没有fieldError,如果有,则不再执行execute()方法,而是返回一个input逻辑视图。
vaildateXxx()方法只校验xxx()方法,并且vaildateXxx()方法校验实在xxx()方法处理逻辑前被调用。
如果同时存在vaildateXxx()与vaildate()方法,那么vaildate()除了校验execute()方法之外也校验xxx()。只是在vaildate()方法执行之前vaildateXxx()方法先执行。