上一篇:Struts2教程4:使用validate方法验证数据
在《Struts2教程4:使用validate方法验证数据》中曾讲到使用validate方法来验证客户端提交的数据,但若是使用validate方法就会将验证代码和正常的逻辑代码混在一块儿,但这样作并不利于代码维护,并且也很难将过些代码用于其余程序的验证。在Struts2中为咱们提供了一个Validation框架,这个框架和Struts1.x提供的Validation框架相似,也是经过XML文件进行配置。 css
1、服务端验证 html
下面将给出一个例子来演示如何使用Struts2的validation框架来进行服务端验证。咱们能够按着以下四步来编写这个程序: java
【第1步】创建Action类(NewValidateAction.java)
apache
package action;
import com.opensymphony.xwork2.ActionSupport;
public
class NewValidateAction
extends ActionSupport
{
private String msg;
//
必须输入
private
int age;
//
在13和20之间
public String getMsg()
{
return msg;
}
public
void setMsg(String msg)
{
this.msg = msg;
}
public
int getAge()
{
return age;
}
public
void setAge(
int age)
{
this.age = age;
}
}
下面咱们来验证msg和age属性。 app
【第2步】配置Action类,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
="demo"
extends
="struts-default"
namespace
="/test"
>
<
action
name
="new_validate"
class
="action.NewValidateAction"
>
<
result
name
="input"
>/validate_form.jsp
</
result
>
<
result
name
="success"
>/validate_form.jsp
</
result
>
</
action
>
</
package
>
</
struts
>
【第3步】编写验证规则配置文件 jsp
这是一个基于XML的配置文件,和struts1.x中的validator框架的验证规则配置文件相似。但通常放到和要验证的.class文件在同一目录下,并且配置文件名要使用以下两个规则中的一个来命名: 测试
<ActionClassName>-validation.xml ui
<ActionClassName>-<ActionAliasName>-validation.xml this
其中<ActionAliasName>就是struts.xml中<ation>的name属性值。在本例中咱们使用第一种命名规则,因此文件名是NewValidateAction-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
>
<
field
name
="msg"
>
<
field-validator
type
="requiredstring"
>
<
message
>请输入信息
</
message
>
</
field-validator
>
</
field
>
<
field
name
="age"
>
<
field-validator
type
="int"
>
<
param
name
="min"
>13
</
param
>
<
param
name
="max"
>20
</
param
>
<
message
>
必须在 13至20之间
</
message
>
</
field-validator
>
</
field
>
</
validators
>
这个文件使用了两个规则:requiredstring(必须输入)和int(肯定整型范围)。关于其余更详细的验证规则,请读者访问http://struts.apache.org/2.0.11.1/docs/validation.html来查看。
【第4步】编写数据录入JSP页。
在Web根目录中创建一个validate_form.jsp文件,代码以下:
<
%@ page
language
="java"
import
="java.util.*"
pageEncoding
="GBK"
%
>
<
%@ taglib
prefix
="s"
uri
="/struts-tags"
%
>
<
link
rel
="stylesheet"
type
="text/css"
href
="<s:url value="
/styles/styles.css"
/>">
<
html
>
<
head
>
<
title
>验证数据
</
title
>
</
head
>
<
body
>
<
s:form
action
="new_validate"
namespace
="/test"
>
<
s:textfield
name
="msg"
label
="姓名"
/>
<
s:textfield
name
="age"
label
="年龄"
/>
<
s:submit
/>
</
s:form
>
</
body
>
</
html
>
你们要注意一下,若是在struts.xml的<package>标签中指定namespace属性,须要在<s:form>中也将namespace和action分开写,如上面代码所示。不能将其连在一块儿,Struts2须要分开的action和namespace。以下面的代码是错误的:
<s:form action="/test/new_validate" >
... ...
</s:form>
在上面的程序中还使用了一个styles.css来定制错误信息的风格。代码以下:
.label {font-style:italic; }
.errorLabel {font-style:italic; color:red; }
.errorMessage {font-weight:bold; color:red; }
须要在Web根目录中创建一个styles目录,并将styles.css
假设Web工程的上下文路径是validation,能够使用以下的URL来测试这个程序:
http://localhost:8080/validation/validate_form.jsp
显示结果如图
1
所示。

图1
2、客户端验证
在Struts2中实现客户端验证很是简单,只须要在<s:form>中加入一个validate属性,值为true。如<s:form validate="true" ... > ... </form>便可。
3、验证嵌套属性
有一类特殊的属性,即这个属性的类型是另一个
JavaBean
,若有一个
User
类,代码以下:
package data;
public
class User
{
private String name;
private
int age;
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;
}
}
在
NewValidateAction
类中加一个
user
属性,代码以下:
package action;
import com.opensymphony.xwork2.ActionSupport;
import data.User;
public
class NewValidateAction
extends ActionSupport
{
private String msg;
private
int age;
private User user;
public String getMsg()
{
return msg;
}
public
void setMsg(String msg)
{
this.msg = msg;
}
public
int getAge()
{
return age;
}
public
void setAge(
int age)
{
this.age = age;
}
public User getUser()
{
return user;
}
public
void setUser(User user)
{
this.user = user;
}
}
若是要验证NewValidateAction中的user属性,能够使用visitor验证器。操做过程以下:
首先在NewValidateAction-validation.xml中加入一个<field>标签,代码以下:
<?
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
="user"
>
<
field-validator
type
="visitor"
>
<
param
name
="context"
>abc
</
param
>
<
param
name
="appendPrefix"
>true
</
param
>
<
message
>User:
</
message
>
</
field-validator
>
</
field
>
</
validators
>
其中context参数将做为验证User类属性的文件名的一部分,如user属性返回一个User对象,那么用于验证User对象属性的文件名为User-abc-validation.xml。这个文件要和User.class文件在同一个目录中。appendPrefix表示是否在字段里加user,若是为true,Struts2就会使用user.name在form提交的数据中查找要验证的数据。这个属性的默认值是true。若是出错,Struts2会将<message>标签中的信息加到User-abc-validation.xml文件中的相应错误信息前面。
User-abc-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
>
<
field
name
="name"
>
<
field-validator
type
="requiredstring"
>
<
message
>请输入name
</
message
>
</
field-validator
>
</
field
>
<
field
name
="age"
>
<
field-validator
type
="int"
>
<
param
name
="min"
>5
</
param
>
<
param
name
="max"
>20
</
param
>
<
message
>
必须在 5至20之间
</
message
>
</
field-validator
>
</
field
>
</
validators
>
下面修改validate_form.jsp,代码以下:
<
s:form
validate
="true"
action
="new_validate"
namespace
="/test"
>
<
s:textfield
name
="msg"
label
="姓名"
/>
<
s:textfield
name
="age"
label
="年龄"
/>
<
s:textfield
name
="user.name"
label
="姓名1"
/>
<
s:textfield
name
="user.age"
label
="年龄1"
/>
<
s:submit
/>
</
s:form
>
你们能够看到,最后两个<s:textfield>的name属性是user.name和user.age,正好是加了前缀的。
如今从新访问
http://localhost:8080/validation/validate_form.jsp
,验证界面如图
2
所示。

图2
经笔者测试,使用visitor没法以客户端验证的方式来验证user属性,但NewValidateAction中其余的属性能够使用客户端测试。
下一篇:Struts2教程6:在Action类中得到HttpServletResponse对象的四种方法