Struts 常用验证

一、struts2.0的输入验证:
 
A、手动验证:


1)重写validate()
2)重写validateXxx()
 
B、使用验证框架
 
Action类都要继承ActionSupport类


二、为一个Action设置多个逻辑处理:
 
为了更具有针对性的处理业务逻辑与针对性的进行输入校验,可以采用指定业务逻辑处理方法的方法,即对同一个Action设置多个逻辑处理方法,也就是说对于某个表单,我们可以指定在Action中让哪个方法来处理它的相关业务
 
解决方法:struts.xml中通过method属性指定处理其逻辑的方法
 
例如:
LoginAction中有login()和regester()两个业务处理方法:
<action name="login" class="com.oristnad.login.LoginAction" method="login">
<action name="reg" class="com.oristnad.login.LoginAction"   method="regist">


A、如果重写了ActionSupport的validate()方法,则该方法会校验所有的处理逻辑。
 
B、为了实现校验指定逻辑方法,可以在Action中增加一个validateXxx()方法,其中Xxx即是Action对应的处理逻辑方法。同时不重写validate方法
 
例如:
  validateRegist()方法---专门校验regist()方法,即校验reg表单提交的内容
  validateLogin()---专门校验login()方法,即校验login表单提交的内容
 
 
三、struts2的输入校验流程:


1)、类型转换器负责对字符串的请求参数执行类型装换,并将这些值设置为Action的属性值
 
2)、在类型转换过程中如果出现异常,则将异常信息保存到ActionContext中,conversionError拦截器负责将其封装到fieldError里,然后执行第3步;如果没有异常,则直接进入第3步
  
3)、如果有validateXxx()方法,则调用该方法
 
4)、调用Action类中的validate()方法
 
5)、如果经过上面4步都没有出现fieldError,将调用Action里处理用户请求的处理方法;
     如果出现了fieldError,将转入input逻辑视图所指定的视图资源。
     
     
      
四、struts2的验证框架初步:
 
只需要为Action指定一个校验文件即可,该文件指定了Action的属性必须满足怎样的规则。
每个Action都有一个校验文件,命名规则:Action名字-validation.xml;
该文件保存在与该Action类的相同路径下。


1、配置文件:
 
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator1.0.2//EN" 
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
     <field name="username">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>用户名不能为空</message>
         </field-validator>
      </field>
      <field name="passwd">
         <field-validator type="requiredstring">
             <message key="error.password"></message>
         </field-validator>
     </field>
</validators>
 
 
1)<field name="username">--要验证的字段
2)<field-validator type="requiredstring">--验证规则(校验器)
3)<param name="trim">true</param>--校验参数
4)<message>用户名不能为空</message>--验证失败的输出信息


2、配置文件中使用国际化显示错误信息:
 
A、message元素的key属性:<message key="error.password"></message>
B、使用${getText("message-key")}: <message>${getText("error.username")}</message>


3、客户端验证:
  在<s:form>表单中添加validate="true"即可,struts2客户端验证仍是基于JavaScript的,struts2将服务器验证转为客户端验证。
  
  <s:form action="login" validate="true">
 
 注意:
      A、如果验证文件中错误信息使用<message key="error.password"></message>形式输出的话,则页面会出现FreeMarker template error!的错误。
       故必须使用${getText("message-key")}形式
      
      B、不是所有的服务器端验证都可以转为客户端验证
 
4、校验器的配置风格:
 
1)字段校验器:字段优先
字段的校验遵循以下规则:
 
<validators>
<field name="被校验的字段名">
    <field-validator type="校验器名">
        <param name="参数名">参数值</param>
        <message>校验失败的提示信息</message>
</field-validator>
</field>   
</validators>     
      
2)非字段校验器配置风格:校验器优先
<validators>
   <validator type="校验器">
      <param name="fieldName">需要被校验的字段</param>
      <param name="参数">参数值</param>
      <message>校验失败的提示信息</message>
         
   </validator>
</validators>
 
 
4.密码验证
 <field-validator type="fieldexpression">
          <param name="expression"><![CDATA[(t1==t)]]></param>
          <message>妈妈不一致</message>
       </field-validator>
      </field>
   <validator type="fieldexpression">
   <param name="t1">t</param>
    <param name="expression"><![CDATA[(t1==t)]]></param>
   <message>密码不一致!</message>
   </validator>


5、常用的校验器:
required--必填校验器
requiredstring--必填字符串校验器
int--整数校验器
double--双精度校验器
date--日期校验器
expression--表达式校验器
email--电子邮件校验器
url--网址校验器
stringlength--字符串长度校验器
regex--正则表达式校验器


 
Struts2 验证框架不起作用的几种可能
1、命名是否符合约定:
<actionClass>-validation.xml 
<actionClass>-<actionAlias>-validation.xml 
2.   validation.xml的标签是否正确。
3.   fieldName 命名是否和jsp以及 action中的属性一致 
4.检查是否在同一个field里面配置了重复的参数,重复的参数也可能会使你的信息显示不出来
5、有可能是版本问题,今天用2.1.16的版本做了很久都不起作用,最后改成2.0.14版本,问题解决。






Demo
(1)配置文件Struts.xml 
 
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="com" namespace="/" extends="struts-default">
        <action name="User" class="com.lyh.struts2.User">
            <result name="success">/result.jsp</result>
            <result name="input">/index.jsp</result>
        </action>
    </package>
</struts>	 
(2)User Action类 
 
package com.lyh.struts2;
import com.opensymphony.xwork2.ActionSupport;
import java.util.*;
public class User extends ActionSupport {
    private String userName;   //用户名
    private String password;    //密码
    private String name;        //名字
    private String sex;          //性别
    private int age;             //年龄
    private Date birthday;       //生日
    private String email;        //电邮
    private String mainPage;     //个人主页
    private String country;      //所在国家
    private String description; //描述
    private List<String> sports = new ArrayList<String>(); //喜欢的运动
    public String execute() throws Exception {
        System.out.println("Age=" + getAge());
        System.out.println("Birthday" + birthday);
        sports = getSports();
        for (String sport : sports) {
            System.out.println(sport);
        }
        if ((sex == null) || sex.equals("")) {
            addFieldError("sex", "sex is not null");
            return INPUT;
        }
        return SUCCESS;
}
―――get/set方法
}	 
(3)验证规则文件User-validation.xml 
 
<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">


<validators>
    <field name="userName">
        <field-validator type="requiredstring">
            <message key="requiredstring"/>
        </field-validator>
        <field-validator type="stringlength">
            <param name="fieldName">userName</param>
            <param name="minLength">6</param>
            <param name="maxLength">10</param>
            <param name="trim">true</param>
            <message key="stringlengthmessage"/>
        </field-validator>
        <field-validator type="regex">
            <param name="fieldName">userName</param>
            <param name="expression">[A-Za-z0-9]+</param>
            <message key="regexmessage"/>
        </field-validator>
    </field>
    <field name="name">
        <field-validator type="requiredstring">
            <message key="requiredstring"/>
        </field-validator>
        <field-validator type="regex">
            <param name="fieldName">name</param>
            <param name="expression">[a-zA-Z]+</param>
            <message key="nameregexmessage"/>
        </field-validator>
    </field>
    <field name="age">
        <field-validator type="int">
            <param name="min">1</param>
            <param name="max">120</param>
            <message key="agemessage"/>
        </field-validator>
    </field>
    <field name="email">
        <field-validator type="email">
            <param name="fieldName">email</param>
            <message key="emailmessage"/>
        </field-validator>
    </field>
    <validator type="url">
        <param name="fieldName">mainPage</param>
        <message key="mainpagemessage"/>
    </validator>
    <field name="birthday">
        <field-validator type="date">
            <param name="min">1980-01-01</param>
            <param name="max">2007-07-29</param>
            <message key="birthdaymessage"/>
        </field-validator>
    </field>
</validators>	 
(4)package.properties属性文件 
 
requiredstring=This field is required!
stringlengthmessage=userName must be between 
${minLength}and${maxLength} needs to be 6-8 characters long !
regexmessage=The userName must be character and number!
nameregexmessage=name must be all character!
agemessage=Age must be in range ${min} and ${max}
emailmessage=Must provide a valid email!
mainpagemessage=Invalid homepage url
birthdaymessage=Birthday must be within ${min} and ${max}	 
(5)index.jsp页面 
 
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <title>Struts2 Validation Application!</title>
        <s:head theme="ajax" />
    </head>
    <body>
        This is a Validate Application!
    <hr>
    <s:fielderror />
    <s:form action="User.action" method="POST">
    <s:textfield key="userName" label="UserName" />
    <br>
    <s:password key="password" label="Password" />
    <s:textfield key="name" label="Name" />
    <s:radio label="Sex" list="{'Male','Female'}" key="sex" />
    <s:textfield label="Age" key="age" value="18" />
    <s:checkboxlist list="{'football','basketball','pingpang'}"
                label="Sports" key="sports" />
    <s:textfield label="Email" key="email" value="[email protected]" />
    <s:textfield label="Main Page" key="mainPage" value="http://" />
    <s:datetimepicker key="birthday" label="Birthday"
 toggleType="explode" toggleDuration="500" value="2007-08-29" />
    <s:select list="{'China','American','Japenese'}"            
label="Select Country" headerKey="1" headerValue="-- Please Select --" key="country" />
    <s:textarea key="description" label="Description" rows="8" cols="20" />
    <s:submit />
    <s:reset
                form now... Press OK to continue!');" />
        </s:form>
        <hr>
        This Example from
<a href="http://hi.baidu.com/vsandjava">[url]http://hi.baidu.com/vsandjava</a>[/url]
    </body>
</html>	 
(6)result.jsp 
 
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>
        Simple jsp page
    </title>
</head>
<body>
<center><h7><b>This is Result!</b></h7></center>
<br>
<center>
    userName:<s:property value="userName"/> <br>
    Password:<s:property value="password"/> <br>
    Sex:<s:property value="sex"/> <br>
    Name:<s:property value="name"/> <br>
    Age:<s:property value="age"/> <br>
    Sports:<s:property value="sports"/> <br>
    Birthday:<s:property value="birthday"/> <br>
    Country:<s:property value="country"/> <br>
    Email:<s:property value="email"/> <br>
    MainPage:<s:property value="mainPage"/> <br>
    Description:<s:property value="description"/> <br>
</center>
</body>
</html><?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        [url]http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd[/url]"
         version="2.5">
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>	 
(7)web.xml 
 
<System.Web> 
<httpRuntime maxRequestLength="10240" /> 
</System.Web>	 

你可能感兴趣的:(Struts 常用验证)