在struts中,根据配置的validation.xml文件进行页面输入项目的验证已经众所周知,本文介绍在struts2中两种validation.xml的配置方式。可以根据不同的需要进行不同的配置。
以下以login页面输入firstname,lastname,和age为例进行说明。
struts.xml中,成功的话转向成功页面。不成功的话转回到原页面。
首先建立userbean文件。
文件名:UserBean.java
包:struts2.login.bean
文件内容:
package struts2.login.bean;
public class UserBean {
private String firstname;
private String lastname;
private Integer age;
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getAge() {
return age;
}
}
然后建立login的action文件
文件名:LoginAction.java
包:struts2.login
文件内容:
package struts2.login;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import struts2.login.bean.UserBean;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport{
private UserBean userBean;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
public UserBean getUserBean() {
return userBean;
}
public void setUserBean(UserBean userBean) {
this.userBean = userBean;
}
@Override
public void validate() {
// TODO Auto-generated method stub
Map map = this.getFieldErrors();
Set set = map.keySet();
for (Iterator iter = set.iterator(); iter.hasNext();)
{
System.out.println(map.get(iter.next()));
}
}
}
对于这个文件,有两点请注意:
1,action文件和bean文件没有放在相同的包下,这是为了说明第二种xml配置的文件路径所用。
2,action文件中的validate方法只是起到一个debug错误message的作用,可去掉。
然后建立login.jsp文件,
文件位置:网站/work的目录下
文件内容:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<s:form action="login" method="post">
<s:textfield name="userBean.firstname" label="firstname"/>
<s:textfield name="userBean.lastname" label="lastname"/>
<s:textfield name="userBean.age" label="age"/>
<s:submit/>
</s:form>
</html>
success.jsp文件
文件位置:网站/work的目录下
文件内容:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
LOGIN SUCCESS
</html>
然后是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="default" extends="struts-default">
<action name="login" class="struts2.login.LoginAction">
<result name="success">/work/success.jsp</result>
<result name="input">/work/login.jsp</result>
</action>
</package>
</struts>
好准备工作全部完了
下面是配置validation.xml文件的时候了
1,第一种方法,在action文件所在的目录下面,建立一个“action名-validation.xml”这样命名的文件
文件名:LoginAction-validation.xml
文件位置:和action文件同目录
文件内容:
<?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="userBean.firstname">
<field-validator type="requiredstring">
<message>request firstname</message>
</field-validator>
</field>
<field name="userBean.lastname">
<field-validator type="requiredstring">
<message>request lastname</message>
</field-validator>
</field>
<field name="userBean.age">
<field-validator type="required">
<message>request integer</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>should between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
文件内容就是firstname和lastname必须输入,age必须是整数,并且在1到150之间。至于xml文件的写法,这个可以参照对应的dtd和相应的帮助。
注意的地方,1,引用firstname等字段的时候,前面加上了userBean,这个userBean是定义在action的变量,这点要一致。
2,对一个字段的多个验证可以写在一起,可以参看age字段。
3,可以使用表达式引用设定的参数值。为${参数名}的形式。
这个文件配置完了,就可以运行了,运行一下,什么都不输入,效果如图。
第二种方法,在第一种方法的基础上进行修改。
把validation.xml文件中的内容修改一下。
文件名:LoginAction-validation.xml
文件位置:和action文件同目录
文件内容:
<?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="userBean">
<field-validator type="visitor">
<param name="context">user</param>
<param name="appendPrefix">true</param>
<message key="appendPrefix">user''s </message>
</field-validator>
</field>
</validators>
这种方法是将具体要验证的bean的项目验证写在另外一个validation文件中。
红字的部分:
userBean指定了action中变量的名字。
visitor是固定的写法。
user是另外一个validation文件的名字中的一部分。
好了,另外一个validation文件的内容如下:
文件名:UserBean-user-validation.xml
文件位置:和UserBean的目录一致
文件内容:
<?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="firstname">
<field-validator type="requiredstring">
<message>request firstname</message>
</field-validator>
</field>
<field name="lastname">
<field-validator type="requiredstring">
<message>request lastname</message>
</field-validator>
</field>
<field name="age">
<field-validator type="required">
<message>request integer</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>should between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
注意地方,1文件的命名,为“bean的class名-context参数指定的值-validation.xml”
2,文件中字段的名字的地方,不需要有userBean的前缀。
好,执行一下,效果如图:
总结一下:
第一种validation方式,把验证集中action的验证文件中。当验证的内容少或者不同的action验证的内容重复性小的时候适用。
第二种validation方式,把验证集中在bean的验证文件中。当多个action都需要对相同bean的内容进行验证