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

Struts2中提供的内置声明式验证器的使用

2016-07-03 15:59 661 查看
Struts2提供的声明式验证器在xwork-core-**.jar包的

com\opensymphony\xwork2\validator\validators\default.xml配置文件中 ,打开文件我们可以看到所有验证器声明:

<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>


下面我们以一个小例子来试用一下部分的验证器

需求:对用户注册页面中的信息进行验证

先做准备工作:

先得有一个注册页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>regist page</title>
<s:head/>
</head>

<body>
<s:form action="regist" namespace="/user">
<s:textfield name="username" label="用户名" requiredLabel="true" requiredPosition="left"></s:textfield>
<s:textfield name="password" label="密码" requiredLabel="true" requiredPosition="left"></s:textfield>
<!-- list的取值是一个ONGL表达式,创建了一个Map对象。必须有name -->
<s:radio name="gender" list="#{'male':'男性','female':'女性'}" label="性别" requiredLabel="true" requiredPosition="left"></s:radio>
<!-- list的取值是一个ONGL表达式,创建了一个List对象。必须有name -->
<s:checkboxlist name="hobbies" list="{'吃饭','睡觉','学java'}" label="爱好"></s:checkboxlist>
<s:textfield name="birthday" label="出生日期:yyyy-MM-dd"></s:textfield>
<s:textfield name="email" label="邮箱"></s:textfield>
<s:textfield name="grade" label="成绩"></s:textfield>
<s:submit value="注册"></s:submit>
</s:form>
</body>
</html>


打开之后,显示为:



对应的Action和model如下:

package demo.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import demo.model.User;

public class UserAction extends ActionSupport implements ModelDriven<User> {

private static final long serialVersionUID = -5966666848749797668L;

private User user = new User();

@Override
public User getModel() {
if (this.user == null) {
this.user = new User();
}
return this.user;
}

public String regist() {
System.out.println(this.user);
return SUCCESS;
}

}


package demo.model;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
private String username;
private String password;
private String gender;
private String hobbies;
private Date birthday;
private String email;
private int grade;

@Override
public String toString() {
return "User [username=" + username + ", password=" + password
+ ", gender=" + gender + ", hobbies=" + hobbies + ", birthday="
+ birthday + ", email=" + email + ", grade=" + grade + "]";
}

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getHobbies() {
return hobbies;
}
public void setHobbies(String hobbies) {
this.hobbies = hobbies;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
}


struts.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<package name="user" extends="struts-default" namespace="/user">
<action name="regist" class="demo.action.UserAction" method="regist">
<result>/success.jsp</result>
<result name="input">/index.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>


记得最后配置好web.xml中的struts过滤器,到此,准备工作就完成了

要使用声明式验证,那么需要在动作类对应的包中,建立一个名为 动作类名-validation.xml的配置文件

本例中,由于UserAction是在demo.action包中,那么我们就在该包中建立名为UserAction-validation.xml的配置文件



配置文件的doctype可以在xwork-core-**.jar中的dtd文件中找到,我们以xwork-validator-1.0.3.dtd这个文件为例,打开后复制里面的doctype,放置在我们新建的配置文件中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">


下面,我们就来用针对字段设置验证器的方式一一试验一下几个验证器

首先我们来试试用户名必填,这里需要注意内置验证器的required和requiredstring的区别,前者是验证字段不能为null,而后者是验证不能为空字符串

由于页面传递过来的字符串,不可能为null,如果没有值,会传递一个空字符串到服务器,而且用以接收的模型类中,对于这个字段也是使用的String来接收

所以,对于页面的输入框字段,后台又是使用String来接收的字段,需要使用的是requiredstring

本例中,我们在UserAction-validation.xml中,添加如下验证规则:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
<!--
filed表示是字段验证方式,
name属性指定要验证的字段,与表单传递的字段名一致
-->
<field name="username">
<!-- 指定验证规则,使用type属性指定验证器 -->
<field-validator type="requiredstring">
<!-- 错误提示信息 -->
<message>请输入用户名</message>
</field-validator>
</field>

<field name="email">
<!-- email其实是regex验证规则的一个子类,只是专门为邮箱写了一个表达式来验证 -->
<field-validator type="email">
<message>请输入正确的邮箱</message>
</field-validator>
</field>
<field name="birthday">
<field-validator type="date">
<message>请输入正确的生日,注意日期的格式</message>
</field-validator>
</field>

<field name="grade">
<field-validator type="required">
<message>请输入分数</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>分数必须为1~150的整数</message>
</field-validator>
</field>
</validators>




一个字段可以如上配置多个验证
a7bf
器,这里有一个小提示,整型的字段,如果不填写,会有一个默认的字段值0

以下是摘自别人家的博客的内容,我忘记了哪位的了。。。

struts2提供了大量的内置校验器:我们可以在xwork-core-**.jar的com.opensymphony.xwork2.validator.validators下找到如下配置文件:default.xml。里面列出了所有的内置校验器。

required:必填校验器,要求field的值不能为null。

requiredstring:必填字符串校验器,要求field的值不能为null,并且长度大于0

  属性——trim:指定在校验之前是否去除字段串前后的空格。

stringlength:字段长度校验器,要求fidle的值必须在指定的范围内,否则校验失败。

  属性——minLength:指定最小长度。 maxLength:指定量大长度。 trim:指定在校验之前是否去除字段串前后的空格。

regex:正则表达式校验器,检查衩校验的field是否匹配一个正则表达式。

  属性——expression:指定正则表达式(2.3.15版用regexExpression)。 caseSensitive:指定进行正则表达式匹配时是否区分大小写。

int:整数校验器,要求field的整数值 必须在指定范围内。

  属性——min:指定最小值。 max指定最大值。

double:双精度浮点数校验器,要求field的双精度浮点数值必须在指定范围内。

  属性——min:指定最小值。 max指定最大值。

fieldexpression:字段OGNL表达式校验器。要求field满足一个ognl表达式。

  属性——expression:指定ognl表达式(表达式要写在
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息