阅读教程

struts2验证

[日期:2008-07-13] 来源:  作者:志伟

一种验证就是采用xwork框架进行验证。

首先,action类要extends ActionSupport。否则不行。

其次,在Action类所在的包下,要按照 ActionName-validation.xml建立一个验证文件,

最后,在struts.xml的ACtion标签下一定要定义一下<result name="input"></result>否则会报错哦。

 

参考文档:
    http://struts.apache.org/2.0.9/docs/ajax-client-side-validation.html
    http://struts.apache.org/2.0.9/docs/pure-javascript-client-side-validation.html
    http://struts.apache.org/2.0.9/docs/client-validation.html

参考示例:
    http://struts.apache.org/2.0.9/docs/ajax-validation.html


Struts2 校验(XML配置校验)

基本说明:

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

Annotation型主要使用Annotation来配置Action中的属性,这里我们做过多的介绍,需要看的请参看我的其他相关文章。

XML配置型主要是指,使用XML来描述配置信息,之后提供给Struts框架做校验。

使用Struts2,XML配置型的校验可以使用三种方式:普通的服务器端校验方式,客户纯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

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标签(引入dojo的js库)

<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-plugin在2.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/08)Struts2的最新版本为2.0.9,还不支持dojo-plugin,所以还没有办法使用Ajax校验。所以要想使用Ajax Validation必须使用Struts2.1.0 SNAPSHOT版本。

下载:

使用Subversion可以从以下位置下载最新的Struts2的源代码:

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

构造:

在下载的apps目录下blank子目录下可以使用如下命令

mvn compile jar:jar

可以在target目录中看到:struts2-blank.war

在plugins目录dojo子目录下使用如下命令

mvn compile jar:jar

可以在target目录中看到dojo-plugin:struts2-dojo-plugin-2.1.0-SNAPSHOT.jar

按照上述的说明构造AJAX校验

一些变化:

Struts 配置文件:

<action name="quizAjax" class="example.QuizAction">
   
<interceptor-ref name="jsonValidationWorkflowStack"/>
    <result name="input">/example/quiz-ajax.jsp</result>
    <result>/example/quiz-success.jsp</result>
</action>

这个interceptor是在Struts 2.1.0 才有的。

JSP文件:

<%--
Created by IntelliJ IDEA.
User: ma.zhao@dl.cn
Date: 2007-9-8
Time: 17:29:43
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>

<html>
<head>
    <title>Validation - AJAX</title>
    <sx:head />
</head>

<s:url id="url" namespace="/example" action="quizAjax"/>

<body>
<s:form method="post" theme="xhtml" namespace="/example" 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>
</body>
</html>

需要注意

<s:url id="url" namespace="/example" action="quizAjax"/>

提供了Dojo校验的URL,一定要注意。

第一条不需要详细解说。

第二条:

<?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>
    <field name="name">
        <field-validator type="requiredstring">
            <message>name can't null</message>
        </field-validator>
    </field>
    <field name="loginName">
        <field-validator type="requiredstring">
            <message>loginName can't null</message>
        </field-validator>
    </field>
    <field name="password">
        <field-validator type="requiredstring">
            <message>password can't null</message>
        </field-validator>
    </field>
    <field name="tag">
        <field-validator type="requiredstring">
            <message>tag can't null</message>
        </field-validator>
    </field>
</validators>

建立一个这样的xml文件便可。当然包含的有验证逻辑哦

 

最后在struts.xml中配置,如:

 

 <action name="add_*" method="add{1}" class="struts.{1}Action"> 
   <param name="path">WEB-INF/classes/user.xml</param>
   <result name="success" type="redirect-action">
    User_List
   </result>
   <result name="input">/user/addUser.jsp</result>
  </action>

 

要注意的是一点,strus2支持在一个Action类中使用多个方法,在struts.xml中分别配置,

以实现不同的功能。

这样的验证文件怎么命名呢?

以上例中的add_*为例。

因为我在调用这个action时,使用的是add_User.acton.虽然这里的是采用通配符,但我们也可以当成是

add_User来处理。所以命名为:UserAction-add_User-validation.xml

看见了吗?格式:Action类名-Action标签中的name-validation.xml

因为我使用的是通配符,以后我如果扩展了一个

add_Persion的action.它也就会寻找一个PersionAction-add_Persion-validation.xml

的验证文件,所以呢,最后在input中也使用通配符,不然,一返回都返回到一个地方了。。。

 

还要注意:在form中使用类似于:name="user.name" name="user.password"这样形式时

在对应的Action中当然有对应的User对象。

这时候validation.xml中的<field name="name">。其中name可要写成"user.name"哦

因为,在Action中没有name这个属性,只有user这个属性。



      
      使用百度搜索:struts2验证百度中搜索:struts2验证
阅读:
录入:志伟

评论 】 【 推荐 】 【 打印
上一篇:
下一篇:
相关教程      
本文评论       全部评论
发表评论


点评: 字数
姓名:

 
搜一下


 
本周热门教程
 

关于我们 | 广告合作 | 法律声明 | 联系站长 | 网站地图 | 网站搜索 | | Top ↑
Copyright © 志伟教程资料网 Powered by zhiweinet 1.0
 本栏目提供:struts2验证