Struts校验器总结

基本说明:

Struts校验可以分为两种类型:Annotation型,XML配置型

    Annotation
型主要使用Annotation来配置Action中的属性,这里我们做过多的介绍,需要看的请参看我的其他相关文章。XML配置型主要是指,使用XML来描述配置信息,之后提供给Struts框架做校验。使用Struts2XML配置型的校验可以使用三种方式:普通的
服务器端校验方式,客户纯JavaScript方式端校验,和Ajax方式的校验。

普通的
服务器端校验方式:

   
客户端提交信息到服务器,在服务器上使用XML配置信息,校验客户端提交的信息,错误的情况下,返回input页面,显示校验错误信息。

客户端纯JavaScript校验方式:

   
在输入画面上,根据XML文件中的配置内容生成对应的JavaScript校验脚本,在提交数据的时候首先使用这些生成的JavaScript校验输入信息,错误情况下在画面上显示错误信息,不需要向服务器提交内容,只有输入数据校验正确的情况下才向服务器提交请求。这种方式的校验不支持所有Struts2内置的校验,只支持一部分校验:

required validator 
    requiredstring validator 
    stringlength validator 
    regex validator 
    email validator 
    url validator 
    int validator 
    double validator

<![CDATA[Number(form.elements['aepTemp.amount'].value.replace(/,/g, ''))<=0]]>

用正则表达式,把逗号换成空的,g代表全局,意思是把num里所有的逗号都去掉

 

校验框架(基于xml
解决方案:
action同一个包内建一个xml
命名规则:action
-validation. xml
如果只对action中的一个方法校验则为:

action
- 方法名-validation.xml

字段校验实例:
<?xml version="1.0" encoding="UTF-8"?>
//
拷贝自以往工程
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "
http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

        <validators>
       //requiredstring
代表字符串类型不能为空

 <field name="username">
  <field-validator type="requiredstring">
   <param name="trim">true</param>
   <message>username should not be blank!</message>
  </field-validator>
   //
定义字符串长度
  <field-validator type="stringlength">
   <param name="minLength">6</param>
   <param name="maxLength">10</param>
   <message>username should be between ${minLength} and ${maxLength}</message>
  </field-validator>
 </field>

 <field name="password">
  <field-validator type="requiredstring">
   <message>password should not be blank!</message>
  </field-validator>
  
  <field-validator type="stringlength">
   <param name="minLength">6</param>
   <param name="maxLength">10</param>
   <message>password should be between ${minLength} and ${maxLength}</message>
  </field-validator>
 </field>
 
字段OGNL表达式校验器

<field name="imagefile">

       <field-validator type="fieldexpression">

              <param name="expression"><![CDATA[imagefile.length() > 0]]></param>

              <message>文件不能为空</message>

       </field-validator>

</field>

email:邮件地址校验器

<field-validator type="email">

       <message>电子邮件地址无效</message>

</field-validator>

regex:正则表达式校验器

<field-validator type="regex">

     <param name="expression"><![CDATA[^13/d{9}$]]></param>

     <message>手机号格式不正确!</message>

</field-validator>


 <field name="repassword">
  <field-validator type="requiredstring">
   <message>repassword should not be blank!</message>
  </field-validator>
  
  <field-validator type="stringlength">
   <param name="minLength">6</param>
   <param name="maxLength">10</param>
   <message>repassword should be between ${minLength} and ${maxLength}</message>
  </field-validator>
 </field>
 

 <field name="age">
         //
定义Int型大小范围

  <field-validator type="int">
   <param name="min">1</param>
   <param name="max">150</param>
   <message>age should be between ${min} and ${max}</message>
  </field-validator>
 </field>
 
 <field name="birthday">
                //
定义非字符串类型不能为空
  <field-validator type="required">
   <message>birthday should not be blank!</message>
  </field-validator>
  //
定义date类型范围
  <field-validator type="date">
   <param name="min">2001-01-01</param>
   <param name="max">2003-12-31</param>
   <message>birthday should be between ${min} and ${max}</message>
  </field-validator>
 </field>
 
 <field name="graduation">
  <field-validator type="required">
   <message>graduation should not be blank!</message>
  </field-validator>
  
  <field-validator type="date">
   <param name="min">2005-01-01</param>
   <param name="max">2007-12-31</param>
   <message>graduation should be between ${min} and ${max}</message>
  </field-validator>
 </field>
 

 
</validators>

非字段校验实例:

 <validator type="requiredstring">
  <param name="fieldName">username</param>
  <message>username should not be blank!</message>
 </validator>
 
 <validator type="stringlength">
  <param name="fieldName">username</param>
  <param name="minLength">6</param>
  <param name="maxLength">10</param>
  <message>username should be between ${minLength} and ${maxLength}</message>
 </validator>

 

Ajax方式校验

     在提交请求的时候,首先使用AJAX的方式将数据提交到服务器,在校验出错的情况下在页面显示错误信息,但是不刷新页面,在校验成功的情况下,才向服务器提交请求。

三种方式比较

 

普通的服务端校验方式

客户端纯JavaScript

Ajax方式

位置

服务器

客户端 

服务器

是否刷新页面

校验代码

Java

JavaScript

Java

具体实现

1 定义Action

    Action.java

2 定义配置文件

 Action-validation.xml

3 struts.xml中定义action,注意由于使用了validation,所以必须定义input名字的result

    <action name="" class="">

   <result></result>

   <result name="input"></result>

    </action>

4 定义JSP页面的Form,例如:

<s:form action="quizAction" >

    <s:textfield label="Name" name="name"/>
    <s:textfield label="Age" name="age"/>
    <s:textfield label="Favorite color" name="answer"/>
    <s:submit/>

</s:form>

普通的服务端校验方式基本相同,但是需要在form定义的时候添加validate="true",例如:

<s:form action="quizAction" validate="true">

    <s:textfield label="Name" name="name"/>
    <s:textfield label="Age" name="age"/>
    <s:textfield label="Favorite color" name="answer"/>
    <s:submit/>

</s:form>

普通的服务端校验方式基本相同,但是需要做如下修改:

1 安装dojo plugin

2 JSP中使用dojo plugin

<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
3
head内部追加head标签(引入dojojs库)

 <sx:head />
4
修改form定义

<s:form method="post" theme="ajax"  action="quizAjax" id="form">
   
<s:textfield label="Name" name="name" />
   
<s:textfield label="Age" name="age" />
   
<s:textfield label="Favorite color" name="answer"/>
   
<sx:submit validate="true" />
</s:form>

说明:struts-dojo-plugin2.1.0的时候可能会Release。现在使用需要从Subversion中去除2.1.0SNAPSHOT代码:

svn http://svn.apache.org/repos/asf/struts/struts2/trunk

代码示例

// QuizAction

package example;

import com.opensymphony.xwork2.ActionSupport;

/**

* Created by IntelliJ IDEA.

* User: ma.zhao@dl.cn

* Date: 2007-9-8

* Time: 13:58:16

* To change this template use File | Settings | File Templates.

*/

public class QuizAction extends ActionSupport {

private static final long serialVersionUID = -7505437345373234225L;

private String name;

private int age;

private String answer;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getAnswer() {

return answer;

}

public void setAnswer(String answer) {

this.answer = answer;

}

public String execute() {

return SUCCESS;

}

}

 

 

// QuizValidation.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="name">

        <field-validator type="requiredstring">

            <message>You must enter a name</message>

        </field-validator>

    </field>

    <field name="age">

        <field-validator type="int">

            <param name="min">13</param>

            <param name="max">19</param>

            <message>Only people ages 13 to 19 may take this quiz</message>

        </field-validator>

    </field>

</validators>

// 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="example" namespace="/example" extends="struts-default">

        <action name="quizAction" class="example.QuizAction">

            <result name="input">/example/quiz-ajax.jsp</result>

            <result>/example/quiz-success.jsp</result>

        </action>

    </package>

</struts>

 

// JSP 文件

<%--

  Created by IntelliJ IDEA.

User: ma.zhao@dl.cn

Date: 2007-9-8

  Time: 14:02:17

  To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ taglib prefix="s" uri="/struts-tags" %>

<html>

<head><title>Quiz Action Validation</title></head>

<body>

<s:form action="quizAction" namespace="/example" validate="true">

    <s:textfield label="Name" name="name"/>

    <s:textfield label="Age" name="age"/>

    <s:textfield label="Favorite color" name="answer"/>

    <s:submit/>

</s:form>

</body>

</html>

 

特别说明(Ajax Validation):

为什么使用AJAX 校验?

    纯的JavaScript校验不刷新页面,但是也不能使用所有的Struts2校验方法;服务端校验可以使用所有Struts2的校验方法,但是需要刷新页面。

Struts2 Ajax校验,既不需要刷新页面,又可以使用Struts2内置的所有的校验方法,所以我们比较倾向于使用Ajax校验。

现在(2007/09/08Struts2的最新版本为2.0.9,还不支持dojo-plugin,所以还没有办法使用Ajax校验。所以要想使用Ajax Validation必须使用Struts2.1.0 SNAPSHOT版本。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值