1 一、用户输入验证 2 1、编程方式: 3 动作类中的所有方法进行验证: 4 5 步骤: 6 a、动作类继承ActionSupport 7 b、覆盖调用public void validate()方法 8 c、在validate方法中,编写不符合要求的代码判断,并调用父类的addFieldError(String fieldName,String errorMessage) 9 如果fieldError(存放错误信息的Map)有任何的元素,就是验证不通过,动作方法不会执行。 10 Struts2框架会返回到name=input的result 11 d、在name=input指定的页面上使用struts2的标签显示错误信息。<s:fielderror/> 12 13 动作类中指定的方法进行验证: 14 编写步骤与上面相同 15 16 验证方法书写有要求: 17 public void validateXxx() Xxx代表的是要验证的动作方法名,其中要把动作方法名的首字母变为大写。 18 19 20 2、基于XML配置文件的方式: 21 动作类中的所有方法进行验证: 22 在动作类的包中,建立一个名称为:动作简单类名-validation.xml ,比如要验证的动作类名是UserAction UserAction-validation.xml 23 内容如下:(不同的struts2版本可能不同,要根据情况去寻找)
在xwork-core-2.3.16.3.jar下的xwork-validator-1.0.3.dtd文件中有定义的
<!--
XWork Validators DTD.
Used the following DOCTYPE.
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
-->
代替下面的老例子
24 <?xml version="1.0" encoding="UTF-8"?> 25 <!DOCTYPE validators PUBLIC 26 "-//OpenSymphony Group//XWork Validator 1.0.3//EN" 27 "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> 28 <validators> 29 <field name="username"> 30 <!-- 内置验证器都是定义好的,在xwork-core.jar com.opensymphony.xwork2.validator.validators包中的default.xml文件中 --> 31 <field-validator type="requiredstring"><!-- 不能为null或者""字符串,默认会去掉前后的空格 --> 32 <message>用户名不能为空</message> 33 </field-validator> 34 </field> 35 </validators> 36 动作类中指定的方法进行验证: 37 配置文件的名称书写有一定要求。 38 动作类名-动作名(配置文件中的动作名)-validation.xml 39 UserAction-user_add-validation.xml
<param name="字段名">内容</param>要去找对应的类名 看看它里面的setXXX()是什么 然后注入
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 4 <!DOCTYPE validators PUBLIC 5 "-//Apache Struts//XWork Validator 1.0.3//EN" 6 "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> 7 8 <validators> 9 <validator type="requiredstring"> 10 <param name="fieldName">name</param> 参数的寻找:针对com.opensymphony.xwork2.validator.validators包中的 default.xml中针对requiredstring寻找类,然后 看看setXxx()方法注入字段名针对name参数不能为空。
11 <message>xml said username bu neng为空空啊啊</message> 12 </validator>
两种方式等同 13 <field name="name"> 14 <field-validator type="requiredstring"> 15 <message>xml said username can not bu null</message> 16 </field-validator> 17 </field> 18 19 </validators>
但是有些地方只能用 validator ,用不了 field name= ,比如表达式
<validator type="expression">
<param name="expression">
maxNum>minNum
</param>
</validator>
jsp页面用<s:actionerror/>输出的是动作错误
<s:fielderror/>输出的是字段错误
例子程序:
Validate.java
1 import java.util.Date; 2 3 import org.apache.struts2.ServletActionContext; 4 import org.apache.struts2.dispatcher.mapper.ActionMapping; 5 6 import com.opensymphony.xwork2.ActionContext; 7 import com.opensymphony.xwork2.ActionSupport; 8 9 public class Validate extends ActionSupport { 10 11 private String name; 12 private String password; 13 14 public String getName() { 15 return name; 16 } 17 18 public void setName(String name) { 19 this.name = name; 20 } 21 22 public String getPassword() { 23 return password; 24 } 25 26 public void setPassword(String password) { 27 this.password = password; 28 } 29 30 public String display() { 31 System.out.println(name+" ffffffffffffffffffffffffffffffffffffffff "+password); 32 if(name==null||"".equals(name.trim())) 33 addFieldError("username", "用户不能为空啊啊"); 34 if(password==null||password.matches("\\d{3,6}")==false) 35 addFieldError("password", "密码错了啊啊"); 36 System.out.println(name+" 222222222 ffffffffffffffffffffffffffffffffffffffff "+password); 37 return SUCCESS; 38 } 39 40 public String execute() 41 { 42 System.out.println("has come to here"); 43 return null; 44 45 } 46 }
Validate-validate_display-validation.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 4 <!DOCTYPE validators PUBLIC 5 "-//Apache Struts//XWork Validator 1.0.3//EN" 6 "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> 7 8 <validators> 9 <validator type="requiredstring"> 10 <param name="fieldName">name</param> 11 <message>xml said username bu neng为空空啊啊</message> 12 </validator> 13 <!-- 等同于 --> 14 <field name="name"> 15 <field-validator type="requiredstring"> 16 <message>xml said username can not bu null</message> 17 </field-validator> 18 </field> 19 20 </validators>
struts.xml中
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 6 <struts> 7 <constant name="struts.devMode" value="true" /> 8 <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant> 9 <package name="mypackage" extends="struts-default"> 10 <global-results> 11 <result name="error">/success.jsp</result> 12 </global-results> 13 </package> 14 <!-- <include file=""></include> --> 15 16 <package name="validate" namespace="/validate" extends="mypackage"> 17 <action name="validate_*" class="cn.itcast.helloworldemo.Validate" method="{1}"> 18 <result name="success">/success.jsp</result> 19 <result name="input">/submit.jsp</result> 20 </action> 21 </package> 22 23 24 25 26 <!-- Add packages here --> 27 28 </struts>
submit.jsp中
1 <s:fielderror name="username"/> 2 <%-- <s:fielderror name="password"/> --%> 3 <form action="${pageContext.request.contextPath}/validate/validate_display" method="post"> 4 <input type="text" name="name"> 姓名 5 <br/> 6 <input type="text" name="password">密码 7 <br/> 8 <input type="text" name="birthday">生日 9 <br/> 10 <input type="submit" > 11 </form>