Struts2 校验(XML配置校验)
http://blog.csdn.net/struts2/article/details/1777417
demo: http://www.myexception.cn/program/721334.html
demo: http://www.myexception.cn/program/721334.html
基本说明:
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
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代码:
代码示例
// 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;
* 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;
private int age;
private String answer;
public String getName() {
return name;
}
return name;
}
public void setName(String name) {
this.name = name;
}
this.name = name;
}
public int getAge() {
return age;
}
return age;
}
public void setAge(int age) {
this.age = age;
}
this.age = age;
}
public String getAnswer() {
return answer;
}
return answer;
}
public void setAnswer(String answer) {
this.answer = answer;
}
this.answer = answer;
}
public String execute() {
return SUCCESS;
}
}
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>
"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">
<!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>
<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" %>
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>
<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:textfield label="Age" name="age"/>
<s:textfield label="Favorite color" name="answer"/>
<s:submit/>
</s:form>
</body>
</html>
</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的源代码:
构造:
在下载的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-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" %>
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>
<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: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,一定要注意。
No comments:
Post a Comment