struts2的验证
2015-07-28 21:17
561 查看
1:Struts2提供了验证框架,功能强大而且简单易用,帮助用户做了很多事情,使得用户不必从头开发。那么一个好的验证框架需要考虑哪些因素呢?
*验证功能的复用性
比如都是对一个int数据类型的验证,验证的是它的数据范围,如果验证功能抽象的好,就可以复用同样的验证功能,省去重复开发的麻烦。
*验证功能的可扩展性
是不是可以自己扩展验证功能,并保证扩展功能和原有的框架功能一样使用。
*验证与业务逻辑分离
在业务开发时,可能需要在业务逻辑不变的情况下修改验证逻辑,比如某个网站要求大于18周岁的公民才能注册,随着业务的开展,要修改为大于15岁的公民才能注册,很显然,这个时候,注册逻辑本身没有改变,但是验证逻辑发生了变化,那么,分离的验证逻辑可以保证在修改验证逻辑的时候,不会为业务逻辑带来麻烦。
2:验证框架入门
验证需求:用户注册时只需要填写自己的账号、姓名、年龄,其中,账号和姓名必须填写,年龄要求必填而且在18岁以上。
简单示例:
页面:register.jsp
[html] view
plaincopy
<%@ 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>Struts2验证框架</title>
</head>
<body>
<s:form action="register" method="post">
<s:textfield name="user.account" label="账号" />
<s:textfield name="user.name" label="姓名" />
<s:textfield name="user.age" label="年龄" />
<s:submit value="注册" />
</s:form>
</body>
</html>
Action的内容:
[html] view
plaincopy
package com.capinfotech.action;
import com.capinfotech.model.UserModel;
public class RegisterAction extends BaseAction {
private UserModel user = new UserModel();
public UserModel getUser() {
return user;
}
public void setUser(UserModel user) {
this.user = user;
}
public String execute() {
System.out.println("传人的数据为:" + user.toString());
return SUCCESS;
}
}
struts.xml的内容:
[html] view
plaincopy
<action name="register" class="com.capinfotech.action.RegisterAction">
<result name="success">/validation/success.jsp</result>
<result name="input">/validation/register.jsp</result>
</action>
验证框架的配置文件RegisterAction-validation.xml
[html] view
plaincopy
<?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.account">
<field-validator type="requiredstring">
<message>请输入账号</message>
</field-validator>
</field>
<field name="user.name">
<field-validator type="requiredstring">
<message>请输入姓名</message>
</field-validator>
</field>
<field name="user.age">
<field-validator type="int">
<param name="min">18</param>
<message>年龄必须在18岁以上</message>
</field-validator>
</field>
</validators>
输出结果:
验证执行时机:验证发生在execute方法运行之前,在Struts2的params拦截器已经把请求的参数反射的设置到Action的属性之后,所以,验证框架实际上验证的是值栈里面的内容。
验证的结果:如果用户输入的参数完全满足验证条件,则会继续执行execute方法,如果用户输入的参数不满足验证条件,注意:3个验证条件只要有一个验证通不过,就会跳转到这个Action所配置的名为input的Result,所以在struts.xml里最好配置一个名为input的result
*验证功能的复用性
比如都是对一个int数据类型的验证,验证的是它的数据范围,如果验证功能抽象的好,就可以复用同样的验证功能,省去重复开发的麻烦。
*验证功能的可扩展性
是不是可以自己扩展验证功能,并保证扩展功能和原有的框架功能一样使用。
*验证与业务逻辑分离
在业务开发时,可能需要在业务逻辑不变的情况下修改验证逻辑,比如某个网站要求大于18周岁的公民才能注册,随着业务的开展,要修改为大于15岁的公民才能注册,很显然,这个时候,注册逻辑本身没有改变,但是验证逻辑发生了变化,那么,分离的验证逻辑可以保证在修改验证逻辑的时候,不会为业务逻辑带来麻烦。
2:验证框架入门
验证需求:用户注册时只需要填写自己的账号、姓名、年龄,其中,账号和姓名必须填写,年龄要求必填而且在18岁以上。
简单示例:
页面:register.jsp
[html] view
plaincopy
<%@ 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>Struts2验证框架</title>
</head>
<body>
<s:form action="register" method="post">
<s:textfield name="user.account" label="账号" />
<s:textfield name="user.name" label="姓名" />
<s:textfield name="user.age" label="年龄" />
<s:submit value="注册" />
</s:form>
</body>
</html>
Action的内容:
[html] view
plaincopy
package com.capinfotech.action;
import com.capinfotech.model.UserModel;
public class RegisterAction extends BaseAction {
private UserModel user = new UserModel();
public UserModel getUser() {
return user;
}
public void setUser(UserModel user) {
this.user = user;
}
public String execute() {
System.out.println("传人的数据为:" + user.toString());
return SUCCESS;
}
}
struts.xml的内容:
[html] view
plaincopy
<action name="register" class="com.capinfotech.action.RegisterAction">
<result name="success">/validation/success.jsp</result>
<result name="input">/validation/register.jsp</result>
</action>
验证框架的配置文件RegisterAction-validation.xml
[html] view
plaincopy
<?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.account">
<field-validator type="requiredstring">
<message>请输入账号</message>
</field-validator>
</field>
<field name="user.name">
<field-validator type="requiredstring">
<message>请输入姓名</message>
</field-validator>
</field>
<field name="user.age">
<field-validator type="int">
<param name="min">18</param>
<message>年龄必须在18岁以上</message>
</field-validator>
</field>
</validators>
输出结果:
验证执行时机:验证发生在execute方法运行之前,在Struts2的params拦截器已经把请求的参数反射的设置到Action的属性之后,所以,验证框架实际上验证的是值栈里面的内容。
验证的结果:如果用户输入的参数完全满足验证条件,则会继续执行execute方法,如果用户输入的参数不满足验证条件,注意:3个验证条件只要有一个验证通不过,就会跳转到这个Action所配置的名为input的Result,所以在struts.xml里最好配置一个名为input的result
相关文章推荐
- 3. Java面向对象之泛型-指定多个泛型
- 3. Java面向对象之泛型-指定多个泛型
- jdk配置
- Java替换字符或十进制数的字符串
- Eclipse 一直提示 loading descriptor for 的解决方法
- Spring结合Hessian协议远程调用方法名不能重载
- spring 和 mybatis 的整合
- 记录JAVA学习的第一天
- JAVA数据类型
- 2. Java面向对象之泛型-构造方法中使用
- 2. Java面向对象之泛型-构造方法中使用
- Java_Web三大框架之Hibernate配置文件(二)
- java学习第一篇
- hessian与spring的结合
- struts2+ajax+json 实例
- 【Struts2框架】第六节拦截器-拦截器的几个小实例
- 7.27JAVA基础
- 2015.7.27 java第一天
- 数组的常用算法(1)--由“为了集齐108将买多少袋干脆面”展开去
- Java_Web三大框架之Hibernate 入门(一)