您的位置:首页 > 编程语言 > Java开发

关于Struts2的XML文件验证

2010-10-31 17:57 369 查看
Struts2除了支持程序代码进行表单验证外还支持XML文件方式的验证,相比较程序代码的验证这种方式的验证显得更方便易用。

XML文件验证总结了在开发中经常要用到的表单验证功能,并将其封装后以XML文件的方式来调用其中的功能。其可实现的验证功能如下:

required
:必填校验器

requiredstring
:必填字符串校验器

int
:整数校验器

double
:双精度浮点数校验器

date
:日期校验器

expression
:表达式校验器

fieldexpression
:字段表达式校验器

email
:电子邮件校验器

url
:网址校验器

visitor
:Visitor校验器

conversion
:转换校验器

stringlength
:字符串长度校验器

regex
:正则表达式校验器

在使用这种验证时需编写一个<ActionClass>-validation.xml配置,并和需要验证的Action类放在同一个包下,例如用一个名为LoginAction类,那么此类的相应XML配置文件名为LoginAction-validation.xml,如果有多个Action标签使用同一个Action类时则在写文件名时还需在Action类后加上个这Action的name值,例如刚才的LoginAction类的name为register,那么相应的XML文件名则为LoginAction-register-validation.xml。

生成了XML文件后需要为文件写个相应的Doctype标签,这个标签可以在xwork-core-2.1.6.jar包的xwork-validator-1.0.3.dtd文件内找到,内容为:

<!DOCTYPE validators PUBLIC

"-//OpenSymphony Group//XWork Validator 1.0.3//EN"

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

需要被验证的信息需写在field标签内,每个field都有一个name属性,其值为唯一性。然后需要在field标签内再定义field-validator标签,field-validator标签有一个type属性用地指出需要使用哪一个验证功能,在此标签下还有param参数标签和message标签,参数是可选的,但message标签必需指出,其值便是验证出错时显示的信息。每个field标签下可以有多个field-validator标签。

现在以一个实例来说明

index.jsp用以显示一个用户注册的页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>Struts2 XML方式表单验证</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">
-->
</head>

<body>
<h1>Struts2 XML方式表单验证</h1>
<hr/>
<s:form action="test/login.action" validate="true">
<s:textfield label="用户名" name="user.name"></s:textfield>
<s:password label="密码" name="user.password"></s:password>
<s:password label="再次确认" name="again"></s:password>
<s:radio list="#{'男':'男','女':'女'}" name="user.sex" ></s:radio>
<s:textfield label="生日" name="user.birthday"/>
<s:textfield label="手机" name="user.phone"/>
<s:textfield label="身份证" name="user.pid"/>
<s:textfield label="邮箱" name="user.email"/>
<s:textfield label="博客" name="user.blog"/>
<s:submit value="注册"></s:submit>
</s:form>
</body>
</html>


ValidateAction-validation.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<field name="user.name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名必须输入!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">3</param>
<param name="maxLength">6</param>
<message>用户名的长度必须在${minLength}到${maxLength}之间!</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请输入密码!</message>
</field-validator>
</field>
<field name="again">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请再次输入密码以做确认!</message>
</field-validator>
</field>
<field name="user.sex">
<field-validator type="required">
<message>请选择你的性别!</message>
</field-validator>
</field>
<field name="user.phone">
<field-validator type="regex">
<param name="expression"><!--[CDATA[^1[358]/d{9}$]]></param>
<message>你所输入的手机号有误,请正确输入!</message>
</field-validator>
</field>
<field name="user.pid">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请填写证件号!</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[^[1-9]/d{5}[1-9]/d{3}((0/d)|(1[0-2]))(([0|1|2]/d)|3[0-1])/d{4}$]]--></param>
<message>你所输入的证件号有误,请正确输入!</message>
</field-validator>
</field>
<field name="user.birthday">
<field-validator type="required">
<message>请输入生日!</message>
</field-validator>
<field-validator type="date">
<message>你所输入的日期格式有误码,请正确输入!</message>
</field-validator>
</field>
<field name="user.email">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请输入电子邮件</message>
</field-validator>
<field-validator type="email">
<message>你所输入的EMAIL格式有误,请正确输入!</message>
</field-validator>
</field>
<field name="user.blog">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请输入个人网址</message>
</field-validator>
<field-validator type="url">
<message>你所输入的网址格式有误,请正确输入!</message>
</field-validator>
</field>
</validators>


ValidateAction类用于实现Action类,在类中我们会比较两次输入的密码是否相同,如果不相同则回到输入页面显示出错信息,否则就把表单中的用户信息显示在page.jsp页面中。

package web.action;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import bean.Person;
public class ValidateAction extends ActionSupport{
private Person user;
private String again;
public Person getUser() {
return user;
}
public void setUser(Person user) {
this.user = user;
}

public String getAgain() {
return again;
}
public void setAgain(String again) {
this.again = again;
}
public String execute()
{
if(!user.getPassword().equals(again))
{
this.addFieldError("user.password", "两次密码输入不匹配!");
return "input";
}
ServletActionContext.getRequest().setAttribute("user", user);
return "success";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: