1.首先需要注意如下的关键文件的查找方法
1)找到在struts-2.3.15.3-all\struts-2.3.15.3\apps\struts2-blank\WEB-INF\lib下的xwork-core-2.3.13.3.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">2)在xwork-core-2.3.15.3.jar\com\opensymphony\xwork2\validator\validators下的default.xml可以看到struts2内置的验证器。
2.首先给出struts.xml的配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="true"/> <package name="p1" extends="struts-default"> <!-- 声明式验证器案例的动作类配置 --> <action name="addStudent" class="com.itheima.web.action.StudentAction" method="addStudent" > <result name="input">/student.jsp</result> </action> </package> </struts>3.StudentAction.java
public class StudentAction extends ActionSupport implements ModelDriven<Student> { private Student student = new Student(); public Student getModel() { return student; } public String addStudent(){ return SUCCESS; } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } }4.student.jsp如下,从中可以看出,student包含的成员变量有username,age,email,password,score,url,gender。这时候需要对输入的信息是否正确进行验证,这时候还需要配置相应的验证器
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%--导入struts2的标签库 --%> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>用户注册,使用的是struts2的标签</title> <s:head></s:head> </head> <body> <s:actionerror/> <%--动作错误 --%> <%--<s:fielderror /> 字段错误 --%> <%--struts2的form标签,它提供了和原始html表单标签几乎一致的属性 action:请求的地址。直接写动作名称。不用写contextPaht method:请求的方式。在这里不用写。struts2的form表单默认就是post enctype:表单编码的MIME类型 --%> <s:form action="addStudent.action"> <s:textfield name="username" label="用户名" /> <s:textfield name="age" label="年龄"/> <s:textfield name="email" label="邮箱"/> <s:textfield name="password" label="密码" /> <s:textfield name="repassword" label="确认密码"/> <s:textfield name="score" label="成绩"/> <s:textfield name="url" label="个人主页"/> <%--list中的取值是生成一个list集合,并往集合中放入元素 --%> <s:radio name="gender" list="{'男','女'}" label="性别"/> <s:submit value="注册"/> </s:form> </body> </html> 5.验证器的命名为StudentAction-addStudent-validation.xml(命名由三部分组成 动作类的类名-struts.xml中定义的动作类的类名-固定validation),其放置位置与StudentAction.java在同一个包下。 <?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>请输入用户名</message> </field-validator> </field> <field name="age"> <field-validator type="int"> <!-- 使用注入的方式,设置最大和最小值 --> <param name="min">18</param> <param name="max">100</param> <message>请输入18-100之间的整数</message> </field-validator> </field> <field name="email"> <field-validator type="email"> <message>请输入正确的邮箱格式</message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <!-- 注入取消使用trim --> <param name="trim">false</param> <message>请输入密码</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">3</param> <param name="maxLength">8</param> <message>密码长度是3~8位的</message> </field-validator> </field> <!-- 确认密码和密码必须保持一致,是2个字段的事,所以要使用基于验证器的声明方式,其中[CDATA[]]是为了去掉特殊字符 --> <validator type="expression"> <param name="expression"> <![CDATA[ password == repassword ]]> </param> <message>两次密码必须一致</message> </validator> <field name="score"> <field-validator type="regex"> <param name="regex"> \d+ </param> <message>请输出正确的成绩</message> </field-validator> </field> <field name="url"> <field-validator type="url"> <message>请输入正确的url地址</message> </field-validator> </field> <field name="gender"> <!-- required是一个只验证是否null的内置验证器,不会去除空格 --> <field-validator type="required"> <message>请选择性别</message> </field-validator> </field> </validators>其中涉及到的注入方式,对应的参数命名方式需要在xwork-core-2.3.15.3.jar\com\opensymphony\xwork2\validator\validators下的default.xml可以看到struts2内置的验证器,并通过其实现类进行查找。在java api中查找Pattern /d+ 多位数字【0-9】