index.jsp
<%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <s:form action="user_login" namespace="/" method="post"> <s:textfield name="name" label="姓名" /> <s:textfield name="password" label="密码" /> <s:submit name="submit" value="submit" /> </s:form> </body> </html>
一、手动编码
①、Action(setxxx方法为了将画面值设置到对应的属性中)
public class UserAction extends ActionSupport { // 接收页面数据 private String name; private String password; public void setName(String name) { this.name = name; } public void setPassword(String password) { this.password = password; } /*=======================验证execute方法===============================*/ @Override public String execute() throws Exception { System.out.println("执行login方法"); return NONE; } @Override public void validate() { super.validate(); } /*=======================验证指定方法=============================== * * 格式:validate + 方法名(方法名首字母大写) * * */ public String login() { System.out.println("执行login方法"); return NONE; } public void validateLogin() { if (name == null || name.trim().length() == 0) { this.addFieldError("name", "姓名不能为空"); } if (password == null || password.trim().length() == 0) { this.addFieldError("password", "密码不能为空"); } } }
②、struts.xml
<package name="interceptorDemo" extends="struts-default" namespace="/"> <global-allowed-methods>regex:.*</global-allowed-methods> <action name="user_*" class="com.xxx.web.action.UserAction" method="{1}"> <result name="input">/demo1/index.jsp</result> </action> </package>
原理:为什么要使用this.addFieldError(String name, String message);
二、XML配置
Ⅰ、在Action所在包下,创建一个XML文件
校验当前ActionClass中所有方法的格式:ActionClassName-validation.xml
如:校验UserAction中所有方法
校验当前ActionClass中指定方法的格式:ActionClassName-ActionName-validation.xml,ActionName对应的是struts.xml文件对应的action标签的name属性的值
如:校验UserAction中login方法
<action name="user_*" class="com.xxx.web.action.UserAction" method="{1}"> <result name="input">/demo1/index.jsp</result> </action>
Ⅱ、引入DTD
struts2-core-2.5.xx.jar包下有xwork-validator-1.0.3.dtd
<!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="name"> <field-validator type="requiredstring"> <message>用户名不能为空</message> </field-validator> </field> </validators>
requiredstring就是校验规则:
Ⅳ、Action
public class UserAction extends ActionSupport { // 接收页面数据 private String name; private String password; public void setName(String name) { this.name = name; } public void setPassword(String password) { this.password = password; } public String login() { System.out.println("执行login方法"); return NONE; } }
运行校验结果:无论name中有没有值都通不过校验,原因是name无法获取到值,缺少get方法
代码如下
public class UserAction extends ActionSupport { // 接收页面数据 private String name; private String password; public void setName(String name) { this.name = name; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public String getPassword() { return password; } public String login() { System.out.println("执行login方法"); return NONE; } }
校验规则:
<validators> <field name="password"> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">12</param> <message>密码需要6-12位</message> </field-validator> </field> <!-- 校验确认密码 --> <field name="repassword"> <field-validator type="fieldexpression"> <!-- <![CDATA[(password==repassword)]]> xml将CDTAT中的内容识别为正常的XML数据内容 --> <param name="expression"><![CDATA[(password==repassword)]]></param> <message>两次密码不一致</message> </field-validator> </field> <!-- 校验年龄 --> <field name="age"> <field-validator type="int"> <param name="min">18</param> <param name="max">60</param> <message>年龄不合法!必须是18-60岁之间</message> </field-validator> </field> <!-- 校验邮箱 --> <field name="email"> <field-validator type="email"> <message>邮箱格式不正确</message> </field-validator> </field> <!-- 校验确认密码 --> <field name="phone"> <field-validator type="regex"> <!-- <![CDATA[******]]> xml将CDTAT中的内容识别为正常的XML数据内容 --> <param name="expression"><![CDATA[^13\d{9}$]]></param> <message>电话号码不正确</message> </field-validator> </field> </validators>
原文:https://www.cnblogs.com/WarBlog/p/14074954.html