Struts2的校验框架依赖自带的两个拦截器validation和workflow,他们都是在默认的拦截器栈中:
<interceptor-stack name="defaultStack">
......
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref>
......
</interceptor-stack>
validation拦截器会根据XML中的配置文件的设置,对JSP中发送的请求的数据进行校验,如果发现错误,会形成一个field-specific errors列表。workflow拦截器,会检查当前产生的各种错误,如果发现错误,那么默认就返回 "input" 结果,并将这些错误信息返回到JSP的form中显示。
如果我们使用的配置,并且struts.xml并没有配置name="input"的action,这时候有校验错误,我们会得到Struts2框架给我们的一个错误信息:你没有配置name="input"的action。
1.
jsp页面代码
<body>
<s:property value="username"/>
<s:form action="login" method="post" validate="true">
<s:textfield label="姓名" name="username"></s:textfield>
<s:textfield label="年龄" name="age"></s:textfield>
<s:password label="密码" name="password"></s:password>
<s:submit value="submit"></s:submit>
</s:form>
<s:debug></s:debug>
</body>
2.
struts.xml中代码
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="com.anbo.action.LoginAction" >
<result name="success">
/result.jsp
</result>
<result name="input">
/Login.jsp
</result>
</action>
</package>
3.
LoginAction中代码
package com.anbo.action;
import javax.swing.plaf.basic.BasicSliderUI.ActionScroller;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private static final long serialVersionUID=-7505437345373234225L;
private String username;
private int age;
private String password;
public int getAge() {
System.out.println("getAge");
return age;
}
public void setAge(int age) {
System.out.println("setAge");
this.age = age;
}
public String getUsername() {
System.out.println("getUsername");
return username;
}
public void setUsername(String username) {
System.out.println("setUsername");
this.username = username;
}
public String getPassword() {
System.out.println("getPassword");
return password;
}
public void setPassword(String password) {
System.out.println("setPassword");
this.password = password;
}
}
4、创建一个XML文件:QuizAction-validation.xml代码如下,这个文件是validation.xml文件,命名标准必须是<ActionClassName>-validation.xml或者是<ActionClassName>-<ActionAliasName>-validation.xml,并且和QuizAction类在同一个目录下。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "
-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<message>you must enter a name</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="max">19</param>
<param name="min">10</param>
<message>age value must in between 10 and 19</message>
</field-validator>
</field>
</validators>
5.创建result.jsp页面