struts2+hibernate3+spring2读书笔记4(数据校验器)

最近买了谢星星(阿蜜果)的企业应用架构设计-Struts2+Hibernate3+Spring2,想更好地学习与管理资料,现在在博客上写读书笔记,呵呵!

[b] 第5章 数据校验器[/b]
[b] 一.使用重写validate()方法进行手动校验[/b]
实例需求:Struts2中可通过在Action中重写ActionSupport类的validate()方法来完成Action中各方法的难证。
1. 建立工程(可参考前几章的建立,方法类似,需在web.xml文件中配置Struts2的FilterDispatcher)
2. 编写用户信息的pojo类:User.java 代码如下:
 package amigo.struts.validation;

import java.util.Date;

/*
* 用户信息的pojo类
* */
public class User {
/**用户名*/
private String username;

/**密码*/
private String password;

/**性别*/
private int gender;

/**年龄*/
private int age;

/**生日*/
private Date birthDate;

/**联系电话*/
private String tel;

/**Email*/
private String email;

/**个人首页*/
private String url;

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 int getGender() {
return gender;
}

public void setGender(int gender) {
this.gender = gender;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public Date getBirthDate() {
return birthDate;
}

public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}

public String getTel() {
return tel;
}

public void setTel(String tel) {
this.tel = tel;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}
}


3. 编写注册的Action:RegAction.java 代码如下:
package amigo.struts.validation;

import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;
/*
* 使用validate()完成注册验证
* */
public class RegAction extends ActionSupport implements ServletRequestAware {
private User user;
private HttpServletRequest request;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public HttpServletRequest getServletRequest() {
return request;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
/*
* 重写validate()方法实现验证
* */

public void validate(){
//非空验证与输入合法验证
if(user.getUsername()==null||"".equals(user.getUsername().trim())){
this.addFieldError("user.username","用户名不能为空");
}else if(user.getUsername()!=null&&!Pattern.matches("\\w{5,50}",user.getUsername().trim())){
this.addFieldError("user.username","用户名输入不合法,必须为长度为5-50的字母或数字");
}
if(user.getPassword()==null||"".equals(user.getPassword().trim()))
{
this.addFieldError("user.password","密码不能为空");
}else if(user.getPassword()!=null&&!Pattern.matches("\\w{5,50}", user.getPassword().trim())){
this.addFieldError("user.password","密码输入不合法,必须为长度为5-50的字母或数字");

}
if(user.getAge()<0||user.getAge()>130){
this.addFieldError("user.age","年龄不合法");
}

}
public String execute(){
return null;

}
}
4.编写注册页面:reg.jsp 代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户注册</title>
</head>
<body>
<s:form action="reg">
<s:textfield name="user.username" label="用户名"/>
<s:password name="user.password" label="密码"></s:password>
<s:select label="性别" name="user.gender"
list="#{'1':'男','0':'女'}"
listKey="key"
listValue="value" value="0"/>

<s:textfield name="user.age" label="年龄"></s:textfield>
<s:textfield name="user.birthDate" label="出生日期"></s:textfield>
<s:textfield name="user.tel" label="联系电话"></s:textfield>
<s:textfield name="user.email" label="Email"></s:textfield>
<s:textfield name="user.url" label="个人首页"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
</body>
</html>
5.配置struts.xml文件 代码如下:
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<include file="struts-default.xml"/>
<package name="amigo" extends="struts-default">
<action name="reg" class="amigo.struts.validation.RegAction">
<result name="input">/validation/reg.jsp</result>
</action>
</package>
</struts>
以上五步后,就完成了重写validate()方法进行手动校验了!呵呵!


[b]二.使用重写validateXxx()方法进行手动校验(这个例子主要是实现在同一个action中实现不同的验证方法)[/b]

1. 编写用户信息的Action: UserAction.java 具体代码如下:

  package amigo.struts.validation;

import java.util.regex.Pattern;

import com.opensymphony.xwork2.ActionSupport;

/**
* 使用validateXxx()方法完成注册验证
* */

public class UserAction extends ActionSupport {
private User user;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}
/**
* 验证用户信息注册表单
* */
public void validateReg(){
//非空验证与输入合法验证
if(user.getUsername()==null||"".equals(user.getUsername().trim())){
this.addFieldError("user.username","用户名不能为空");
}else if(user.getUsername()!=null&&!Pattern.matches("\\w{5,50}",user.getUsername().trim())){
this.addFieldError("user.username","用户名输入不合法,必须为长度为5-50的字母或数字");
}
if(user.getPassword()==null||"".equals(user.getPassword().trim()))
{
this.addFieldError("user.password","密码不能为空");
}else if(user.getPassword()!=null&&!Pattern.matches("\\w{5,50}", user.getPassword().trim())){
this.addFieldError("user.password","密码输入不合法,必须为长度为5-50的字母或数字");

}
if(user.getAge()<0||user.getAge()>130){
this.addFieldError("user.age","年龄不合法");
}
}
public void validateLogin(){
//非空验证与输入合法验证
if(user.getUsername()==null||"".equals(user.getUsername().trim())){
this.addFieldError("user.username", "用户名不能为空!");
}
if(user.getPassword()==null||"".equals(user.getPassword().trim())){
this.addFieldError("user.password", "密码不能为空!");
}

}
/**
* 用户完成注册
* */
public String reg(){
//实现代码省略
return null;
}

public String login(){
//实现代码省略
return null;
}
public String execute(){
return null;
}

}


2. 编写注册页面: validateXxxReg.jsp 具体代码如下:
 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户注册</title>
</head>
<body>
<s:form action="userReg">
<s:textfield name="user.username" label="用户名"/>
<s:password name="user.password" label="密码"></s:password>
<s:select label="性别" name="user.gender"
list="#{'1':'男','0':'女'}"
listKey="key"
listValue="value" value="0"/>

<s:textfield name="user.age" label="年龄"></s:textfield>
<s:textfield name="user.birthDate" label="出生日期"></s:textfield>
<s:textfield name="user.tel" label="联系电话"></s:textfield>
<s:textfield name="user.email" label="Email"></s:textfield>
<s:textfield name="user.url" label="个人首页"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
</body>
</html>
3. 编写登录页面:validateXxxLogin.jsp 具体代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户登录</title>
</head>
<body>
<s:form action="userLogin">
<s:textfield name="user.username" label="用户名:"></s:textfield>
<s:password name="user.password" label="密码:"></s:password>
<s:submit></s:submit>
</s:form>
</body>
</html>
4. 配置 sturts.xml

<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<include file="struts-default.xml"/>
<package name="amigo" extends="struts-default">
<action name="reg" class="amigo.struts.validation.RegAction">
<result name="input">/validation/reg.jsp</result>
</action>

<action name="userReg" class="amigo.struts.validation.UserAction" method="reg">
<result name="input">/validation/validateXxxReg.jsp</result>
</action>

<action name="userLogin" class="amigo.struts.validation.UserAction" method="login">
<result name="input">/validation/validateXxxLogin.jsp</result>
</action>

</package>
</struts>

以上四步后,就完成了重写validateXxx()方法进行手动校验了!呵呵!下面我们再来看看Struts2的验证框架。


[b]三.使用Struts2的验证框架完成服务端校验[/b]
1.编写Action类:ValjFrameworkRegAction.java

 package amigo.struts.validation;

import com.opensymphony.xwork2.ActionSupport;
/**
* 使用Struts2的验证框架完成数据校验
* */
public class ValFrameworkRegAction extends ActionSupport {
private User user;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}
public String execute(){
return null;

}
}

2.编写验证文件: ValFrameworkRegAction-validsation.xml
Struts 2 中的每个Action都可以有一个验证文件,该验证文件与Action处于同目录中,命名格式为:Action的名称-validation.xml,其中“-validation.xml”是确定的,而“Action的名称”会根椐不同的Action而有所不同,本实例的验证文件的名称为:ValFrameworkRegAction-validsation.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="user.username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{5,50})]]></param>
<message>用户名输入不合法,必须为长度为5-50之间的字母或数字</message>
</field-validator>

</field>

<field name="user.password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>密码不能为空</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{5,50})]]></param>
<message>密码输入不合法,必须为长度为5-50之间的字母或数字</message>
</field-validator>
</field>

<field name="user.age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">130</param>
<message>年龄输入不合法</message>
</field-validator>
</field>

</validators>
3. 编写注册页面:valFrameworkReg.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户注册</title>
</head>
<body>
<s:form action="valFrameworkReg" >
<s:textfield name="user.username" label="用户名"/>
<s:password name="user.password" label="密码"></s:password>
<s:select label="性别" name="user.gender"
list="#{'1':'男','0':'女'}"
listKey="key"
listValue="value" value="0"/>

<s:textfield name="user.age" label="年龄"></s:textfield>
<s:textfield name="user.birthDate" label="出生日期"></s:textfield>
<s:textfield name="user.tel" label="联系电话"></s:textfield>
<s:textfield name="user.email" label="Email"></s:textfield>
<s:textfield name="user.url" label="个人首页"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
</body>
</html>

4.配置struts.xml,添加的信息如下:

<action name="valFrameworkReg" class="amigo.struts.validation.ValFrameworkRegAction">
<result name="input">/validation/valFrameworkReg.jsp</result>
</action>
以上四步后,就完成了Struts2的验证框架服务端的校验了!呵呵!下面我们再来看看客户端的校验。


四.使用Struts2的验证框架完成客户端校验
在Strut2中,进行客户端校验将由框架在页面中自动生成javascript代码,在提交时调用自动生成的javascript代码中的函数:validateForm_Action 名称(),要实现客户端校验比较简单,只要在jsp页面的form的validate属性设为true就可以了。如下:
  <s:form action=”valFrameworkReg” validate=”true”></s:form>


[b]五.国际化校验的提示信息[/b]
主要是实现验证信息的国际化:步骤如下:
1. 在src目录中创建校验提示信息的配置文件
validationMessages.properties

user.username.requried=用户名不能为空
user.username.regex=用户名输入不合法,必须为长度为5-50之间的字母或数字
user.password.requried=密码不能为空
user.password.regex=密码输入不合法,必须为长度为5-50之间的字母或数字
user.age=年龄必须在${min}和${max}}之间!


validationMessages_zh_CN.properties
user.username.requried=\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a
user.username.regex=\u7528\u6237\u540d\u8f93\u5165\u4e0d\u5408\u6cd5\uff0c\u5fc5\u987b\u4e3a\u957f\u5ea6\u4e3a5-50\u4e4b\u95f4\u7684\u5b57\u6bcd\u6216\u6570\u5b57
user.password.requried=\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a
user.password.regex=\u5bc6\u7801\u8f93\u5165\u4e0d\u5408\u6cd5\uff0c\u5fc5\u987b\u4e3a\u957f\u5ea6\u4e3a5-50\u4e4b\u95f4\u7684\u5b57\u6bcd\u6216\u6570\u5b57
user.age=\u5e74\u9f84\u5fc5\u987b\u5728${min}\u548c${max}}\u4e4b\u95f4\uff01


2.修改struts.xml文件
在struts的头部添加如下代码(注是在struts的标签内添加):

  <constant name="struts.custom.i18n.resources" value="validationMessages"></constant>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
3. 修改校验文件 valFrameworkRegAction-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="user.username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<!--用了国际化,user.username.requried的内容是:用户名不能为空 -->
<message>${getText("user.username.requried")}</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{5,50})]]></param>
<!--用了国际化,user.username.regex内容是:用户名输入不合法,必须为长度为5-50之间的字母或数字 -->
<message>${getText("user.username.regex")}</message>
</field-validator>

</field>

<field name="user.password">
<field-validator type="requiredstring">

<param name="trim">true</param>
<!--用了国际化,user.password.requried的内容是:密码不能为空 -->
<message>${getText("user.password.requried")}</message>
</field-validator>

<field-validator type="regex">
<param name="expression"><![CDATA[(\w{5,50})]]></param>
<!--用了国际化,user.password.regex的内容是:密码输入不合法,必须为长度为5-50之间的字母或数字 -->
<message>${getText("user.password.regex")}</message>
</field-validator>
</field>

<field name="user.age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">130</param>
<!--user.age的内容是:年龄输入不合法 -->
<message>${getText("user.age")}</message>

</field-validator>
</field>

</validators>

以上三步后,就完成了国际化的验证校验了!


六.常用内建的较验器

1. 必填字符串校验器requiredstring
字段校验器
<field name="user.username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空</message>
</field-validator>
</field> 非字段校验器
<validator type=”requiredstring”>
<param name="fildname">user.name</param>
<param name=”trim”>true</param>
<message>用户名不能为空</message>
</validator>
2.整数范围校验器 int
filedName:用于非字段校验器,指定需要验证的属性名。
Min: 可选参数,用于指定整数最小值
Max:可选参数,用于指定最大值。
字段校验器
<field name="user.age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">130</param>
<message>年龄输入不合法</message>
</field-validator>
</field>

非字段校验器

<validator type=”int”>
<param name="fildname"> user.age </param>
<param name=”min”>1</param>
<param name=”max”>130</param>
<message>年龄输入不合法</message>
</validator>
3.正则表达式校验器
Fieldname:非字段校验器具有该属性,指定Action属必名。
Expression:必填,指定正则表达式
caseSensitive:非必填,指定是否区分大小写,默认为true.


字段校验器
<field name="user.username">
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{5,50})]]></param>
<message>用户名输入不合法,必须为长度为5-50之间的字母或数字</message>
</field-validator>
</field>

非字段校验器
<validator type=” regex”>
<param name="fildname"> user.username </param>
<param name=” expression”><![CDATA[(\w{5,50})]]></param>
<message>用户名输入不合法,必须为长度为5-50之间的字母或数字</message>
</validator>

4.必填校验器

 字段校验器
<field name="user.username">
<field-validator type="required">
<message>用户名不能为空</message>
</field-validator>
</field>

非字段校验器
<validator type=”required”>
<param name="fildname">user.name</param>
<message>用户名不能为空</message>
</validator>


5.字符串度度校验器
 字段校验器

<field name=”user.username”>
<field-validator type=”stringlength”>
<param name=”minLength”>5</param>
<param name=”maxLength”>50</param>
<message>用户名长度必须在5-50之间</message>
</field-validator >
</field >

非字段校验器

< validator type=”stringlength”>
<param name=”fieldname”>user.username</param>
<param name=”minLength”>5</param>
<param name=”maxLength”>50</param>
<message>用户名长度必须在5-50之间</message>
</validator>

6.日期校验器
 字段校验器
<field name="user.birthDate">
<field-validator type="date">
<param name="min">1850-01-01</param>
<param name="max">2015-07-20</param>
<message>出生日期输入不合法</message>
</field-validator>
</field>


非字段校验器
< validator type="date">
<param name="fieldname"> user.birthDate </param>
<param name="min">1850-01-01</param>
<param name="max">2015-07-20</param>
<message>出生日期输入不合法</message>
</ validator>
7.网址校验器
字段校验器
<field name="user.url">
<field-validator type="url">
<message>个人首页输入不合法</message>
</field-validator>
</field>
非字段校验器
< validator type="url">
<param name=”fieldname”>user.url</param>
<message>个人首页输入不合法</message>
</validator>


8.邮件地址校验器
字段校验器
<field name="user.email">
<field-validator type="email">
<message> Email地址不合法</message>
</field-validator>
</field>

非字段校验器
< validator type="email">
<param name=”fieldname”> user.email </param>
<message> Email地址不合法</message>
</validator>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值