Struts2 校验(XML配置校验)

http://35java.com/zhibo/forum.php?mod=viewthread&tid=366&extra=page%3D4

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

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

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

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

客户端纯JavaScript校验方式:

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

requiredvalidator

requiredstringvalidator

stringlengthvalidator

regexvalidator

emailvalidator

urlvalidator

intvalidator

doublevalidator

Ajax方式校验

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

三种方式比较

普通的服务端校验方式客户端纯JavaScriptAjax方式

位置服务器客户端服务器

是否刷新页面是否否

校验代码JavaJavaScriptJava

具体实现1定义Action类

Action.java

2定义配置文件

Action-validation.xml

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

<actionname=""class="">

<result></result>

<resultname="input"></result>

</action>

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

<s:formaction="quizAction">

<s:textfieldlabel="Name"name="name"/>

<s:textfieldlabel="Age"name="age"/>

<s:textfieldlabel="Favoritecolor"name="answer"/>

<s:submit/>

</s:form>

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

<s:formaction="quizAction"validate="true">

<s:textfieldlabel="Name"name="name"/>

<s:textfieldlabel="Age"name="age"/>

<s:textfieldlabel="Favoritecolor"name="answer"/>

<s:submit/>

</s:form>

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

1安装dojoplugin

2JSP中使用dojoplugin

<%@taglibprefix="sx"uri="/struts-dojo-tags"%>

3在head内部追加head标签(引入dojo的js库)

<sx:head/>

4修改form定义

<s:formmethod="post"theme="ajax"action="quizAjax"id="form">

<s:textfieldlabel="Name"name="name"/>

<s:textfieldlabel="Age"name="age"/>

<s:textfieldlabel="Favoritecolor"name="answer"/>

<sx:submitvalidate="true"/>

</s:form>

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

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

代码示例

//QuizAction类

packageexample;

importcom.opensymphony.xwork2.ActionSupport;

/**

*CreatedbyIntelliJIDEA.

*User:[email protected]

*Date:2007-9-8

*Time:13:58:16

*TochangethistemplateuseFile|Settings|FileTemplates.

*/

public

classQuizActionextendsActionSupport{

private

staticfinallongserialVersionUID=

-7505437345373234225L;

privateStringname;

private

intage;

privateStringanswer;

publicStringgetName(){

returnname;

}

public

voidsetName(Stringname){

this.name=name;

}

public

intgetAge(){

returnage;

}

public

voidsetAge(intage){

this.age=age;

}

publicStringgetAnswer(){

returnanswer;

}

public

voidsetAnswer(Stringanswer){

this.answer=answer;

}

publicStringexecute(){

returnSUCCESS;

}

}

//QuizValidation.xml校验配置文件

<!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN"

"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>

<fieldname="name">

<field-validatortype="requiredstring">

<message>Youmustenteraname</message>

</field-validator>

</field>

<fieldname="age">

<field-validatortype="int">

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

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

<message>Onlypeopleages13to19maytakethisquiz</message>

</field-validator>

</field>

</validators>

//struts.xml配置文件

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstrutsPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<packagename="example"namespace="/example"extends="struts-default">

<actionname="quizAction"class="example.QuizAction">

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

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

</action>

</package>

</struts>

//JSP文件

<%--

CreatedbyIntelliJIDEA.

User:[email protected]

Date:2007-9-8

Time:14:02:17

TochangethistemplateuseFile|Settings|FileTemplates.

--%>

<%@pagecontentType="text/html;charset=UTF-8"language="java"

%>

<%@taglibprefix="s"uri="/struts-tags"

%>

<html>

<head><title>QuizActionValidation</title></head>

<body>

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

<s:textfieldlabel="Name"name="name"/>

<s:textfieldlabel="Age"name="age"/>

<s:textfieldlabel="Favoritecolor"name="answer"/>

<s:submit/>

</s:form>

</body>

</html>

特别说明(AjaxValidation):

为什么使用AJAX校验?

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

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

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

相关推荐