struts2学习之表单校验的两种方式

来源:互联网 发布:淘宝网址怎么找 编辑:程序博客网 时间:2024/05/16 10:41

基于覆盖validate方法的表单校验

Action类一般都继承ActionSupport类。

通过覆盖ActionSupport类的validate方法即可在自己的Action类中校验输入项的值。

校验动作类中的所有方法

UserAction类

package com.struts2.action.example;import java.io.Serializable;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport implements Serializable {    private static final long serialVersionUID = 7553541763848145723L;    private String username;// 用户名不能为空,还要去掉首尾空格    private String password;    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String add() {        System.out.println("执行了user的add方法");        return SUCCESS;    }    public String update() {        System.out.println("执行了user的update方法");        return SUCCESS;    }     //对动作类中的所有方法进行验证     @Override     public void validate() {//验证方法。只考虑不符合条件的         if(username==null||"".equals(username.trim())){             addFieldError("username", "用户名不能为空");         }         if(password==null||!password.matches("\\w{6,16}")){             addFieldError("password", "密码不能为空且必须是6~16位的大小写字母或数字");         }     }}

校验动作类中的指定方法

将上面动作类的validate方法改写如下

public void validateAdd() {    if (username == null || "".equals(username.trim())) {        addFieldError("username", "用户名不能为空");    }    if (password == null || !password.matches("\\d{3,6}")) {        addFieldError("password", "密码不能为空且必须是3~6位的数字");    }}

即指定只校验add方法。

形如public void validateXxx()的方法,即为校验指定Xxx方法,Xxx代表的是要验证的动作方法名,要把动作方法名的首字母变为大写。

struts.xml内容

<package name="validation" namespace="/validation" extends="struts-default">        <action name="user_*" class="com.struts2.action.example.UserAction" method="{1}">            <result name="success">/WEB-INF/jsp/success.jsp</result>            <result name="input">/{1}User.jsp</result>        </action></package>

name=user_*,为使用通配符的方式访问动作类中指定的方法

method={1},为使用占位符的方式获取通配符中的方法名

addUser.jsp内容

<form action="${pageContext.request.contextPath}/validation/user_add.action" method="post">    用户名:<input type="text" name="username" value="${param.username }"/><s:fielderror fieldName="username"/><br/>    密码:<input type="password" name="password" value="${param.password }"/> <s:fielderror fieldName="password"/><br/>    <input type="submit" value="保存"/></form>

访问地址http://localhost:8080/Struts2/addUser.jsp

直接点提交按钮提示如下:

按validation方法里的逻辑填写正确的输入项后,控制台输出结果如下:

成功通过了验证,并执行了Action类的add方法。

基于xml文件的表单校验

校验动作类中的所有方法

把动作类的validate方法注释掉,并添加UserAction-validation.xml内容

<?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"><!-- 基于配置文件的表单验证1,动作类中指定的方法进行验证:    配置文件名:动作类名-动作名(配置文件中的动作名)-validation.xml,如,UserAction-user_add-validation.xml2,验证动作类中的所有方法:    配置文件名:动作简单类名-validation.xml,如,UserAction-validation.xml -->  <validators>    <validator type="requiredstring">        <param name="fieldName">username</param>        <message>用户名不能为空!</message>    </validator>    <field name="password">        <field-validator type="requiredstring">                         <message>密码不能为空!</message>        </field-validator>        <field-validator type="regex">                      <param name="regex"><![CDATA[\w{6,16}]]></param>            <message>密码可以为6~16位数字和字母的组合!</message>        </field-validator>    </field> </validators>      

普通校验和字段校验

普通校验

eg:

<validator type="requiredstring">    <param name="fieldName">username</param>    <message>用户名不能为空!</message></validator>

字段验证

一般比普通验证更可取,因为可设置多个字段验证器

<field name="username">    <field-validator type="requiredstring">        <message>用户名不能为空!</message>    </field-validator>    <field-validator type="email">                                      <message>用户名必须邮箱账号!</message>    </field-validator></field>

校验动作类中的指定方法

只要把上面的校验文件名改成UserAction-user_add-validation.xml即可。

其中user_add匹配struts.xml文件中的user_*

xml校验配置文件名的写法

以下两种写法有共同的验证效果

<actionClass>-validation.xml<actionClass>-<actionAlias>-validation.xml

我们可将常见(共同)的校验写在<actionClass>-validation.xml中,更具体的上下文内容写在<actionClass>-<actionAlias>-validation.xml中,
框架将验证这两个验证配置文件中可用的验证器。如果两个验证配置文件中定义了一样的验证器,那么当验证不通过时,将发现2个错误,这是由于struts2框架将合并发现在两个验证配置文件中的验证信息。

已定义的验证器

在com/opensymphony/xwork2/validator/validators/default.xml文件中定义。

包括:

  1. conversion validator
  2. date validator
  3. double validator
  4. email validator
  5. expression validator
  6. fieldexpression validator
  7. int validator
  8. regex validator
  9. required validator
  10. requiredstring validator
  11. short validator
  12. stringlength validator
  13. url validator
  14. visitor validator
  15. conditionalvisitor validator

Action类的验证器是怎样被找到

struts2框架将搜索action的继承树寻找这个action类默认校验的接口和父类。

总结

  1. 当用户按下注册表单提交按钮,Struts2将用户的输入传送到Action或javabean的实例字段。然后,Struts2会自动执行validate方法。如果有任何的if语句为真,Struts2将自动调用其addFieldError方法(我们的Action类继承扩展了ActionSupport)添加错误信息。
    如果有任何错误已被添加那么Struts2将不会进行调用execute方法。Struts2框架将返回“input”作为调用Action后的结果。
  2. 形如UserAction-validation.xml验证文件必须和起动作类放在同一包下,否则不起作用。
  3. 当使用字段验证时,字段验证语法总是更可取比使用普通验证语法,因为它有利于根据字段字段校验分组。这是非常方便特别是如果一个字段需要有许多字段验证,这几乎总是如此。
  4. Action类中的validate方法优先于execute方法当被struts框架调用时,若验证出错,将返回“input”,如验证通过,则调用execute方法并返回execute方法的返回值。

以上。。。

0 0
原创粉丝点击