Structs2 校验框架
代码结构:

使用Struts校验框架,保证输入学生的基本信息:学号、姓名、性别、出生年月、专业、总学分等,要求输入满足以下条件:
(1) 学号前两位大于“13”并且后面4位必须为数字;
(2) 出生年月必须保证年龄大于等于18岁;
(3) 专业不能为空;
(4) 总学分在0-80之间。
RegistAction.java
package com.action;
import java.util.*; import com.bean.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class RegistAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception { if(hasErrors()){
return INPUT;
}
return SUCCESS;
}
public void validate(){
Calendar cal = Calendar.getInstance();
String[] str = user.getBir().split("-"); int yearNow = cal.get(Calendar.YEAR);
int monthNow = cal.get(Calendar.MONTH)+1;
int dayNow = cal.get(Calendar.DAY_OF_MONTH); int yearBirth=Integer.parseInt(str[0]);
int monthBirth=Integer.parseInt(str[1]);
int dayBirth=Integer.parseInt(str[2]); int age=yearNow-yearBirth;
if(monthNow<=monthBirth || (monthNow == monthBirth && dayNow < dayBirth)) age--;
if(age < 18){
addFieldError("user.bir", "出生年月必须保证年龄大于等于18岁!");//QAQ
}
} }
RegistAction-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>
<field name="user.id">
<field-validator type="regex">
<param name="expression"><![CDATA[(^(1[4-9]|[2-9][0-9]\d).*\d{4}$)]]></param>
<message>学号前两位大于“13”并且后面4位必须为数字!</message>
</field-validator> <field-validator type="requiredstring">
<param name="trim">true</param>
<message>学号不能为空!</message>
</field-validator>
</field> <field name="user.major">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>专业不能为空!</message>
</field-validator>
</field> <field name="user.score">
<field-validator type="required">
<message>请输入用户考试成绩</message>
</field-validator>
<field-validator type="int">
<param name="min">0</param>
<param name="max">80</param>
<message>学分必须在0-80之间!</message>
</field-validator>
</field> </validators>
User.java
package com.bean;
import java.util.Date;
import com.bean.*;
public class User {
//学号、姓名、性别、出生年月、专业、总学分等
private String id;
private String username;
private String agender;
private String bir; //生日类/自定义类型转换/将生日的年月取出方便计算年龄
private int age;
private String major;
private int score;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAgender() {
return agender;
}
public void setAgender(String agender) {
this.agender = agender;
}
public String getBir() {
return bir;
}
public void setBir(String bir) {
this.bir = bir;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
} }
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="myform" class="com.action.RegistAction">
<result name="success">/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %> <html>
<head>
<title>注册页面</title>
<!-- <script type="text/javascript"> -->
<!-- function validateAge(){ -->
<!-- var birthday=$('#user.age').val(); //假设用户输入的是这种格式 birthday="2017-10-11" -->
<!-- var birthday1=birthday.split('-'); -->
<!-- var convert2Date= new Date(birthday1[0],birthday1[1],birthday1[2]);//把字符串转换成日期 -->
<!-- var nowDate=new Date(); //获取当前时间 -->
<!-- //var year=nowDate.getFullYear(); -->
<!-- //var month=nowDate.getMonth()+1; -->
<!-- //var date=nowDate.getDate(); -->
<!-- //var nowDate=new Date(year,month,date); -->
<!-- var age=nowDate.getTime()-convert2Date.getTime(); //毫秒 -->
<!-- age=age/(24*3600*1000); //天数 至于转换成多少年(岁),详细的还要根据是否闰年计算 age/(24*3600*1000*366) 或者 age/(24*3600*1000*365) -->
<!-- } -->
<!-- </script> -->
</head>
<body>
<s:form action="myform" method="post">
<s:textfield name="user.id" label="学号"></s:textfield>
<s:textfield name="user.username" label="姓名"></s:textfield>
<s:radio name="user.agender" list="#{1:'男',0:'女'}" label="性别" value="1"></s:radio>
<s:textfield name="user.bir" label="生日" placeholder="xxxx-xx-xx"></s:textfield>
<!-- <s:hidden name="user.age" label="年龄"></s:hidden> -->
<s:textfield name="user.major" label="专业"></s:textfield>
<s:textfield name="user.score" label="总学分"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
</body>
</html>
success.jsp
<%@ 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>成功页面</title>
</head> <body>
恭喜<s:property value="user.username"/>!您已经注册成功!
</body>
</html>
Structs2 校验框架的更多相关文章
- (转)struts2:数据校验,通过XWork校验框架实现(validation.xml)
		转载自:http://www.cnblogs.com/nayitian/p/3475661.html struts2:数据校验,通过XWork校验框架实现(validation.xml) 根据输入 ... 
- struts2:数据校验,通过XWork校验框架实现(validation.xml)
		根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种.服务器端验证目前有两种方式: 第一种: 参考:struts2:数据校验,通过Action中的validate()方法实现校 ... 
- Java对象校验框架之Oval
		只要有接口,就会有参数的校验,目前开源的校验框架已经非常多了,不过不得不提一下Oval.OVal 是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件.Annotation.POJO ... 
- Struts2中的校验框架
		Struts2提供的客户端校验 尽管这种支持比较弱,但采用Struts2中的客户端校验时需要注意以下几点 1..将<s:form validate="true">的va ... 
- 高效使用hibernate-validator校验框架
		一.前言 高效.合理的使用hibernate-validator校验框架可以提高程序的可读性,以及减少不必要的代码逻辑.接下来会介绍一下常用一些使用方式. 二.常用注解说明 限制 说明 @Null 限 ... 
- 类Shiro权限校验框架的设计和实现(2)--对复杂权限表达式的支持
		前言: 我看了下shiro好像默认不支持复杂表达式的权限校验, 它需要开发者自己去做些功能扩展的工作. 针对这个问题, 同时也会为了弥补上一篇文章提到的支持复杂表示需求, 特地尝试写一下解决方法. 本 ... 
- Dubbo的Filter实战--整合Oval校验框架
		前言: 其实很早之前就想写一篇关于oval和具体服务相整合的常见做法, 并以此作为一篇笔记. 趁现在项目中间空闲期, 刚好对dubbo的filter有一些了解. 因此想结合两者, 写一下既结合校验框架 ... 
- SpringMVC中的 JSR 303 数据校验框架说明
		JSR 303 是java为Bean数据合法性校验提供的标准框架,它已经包含在JavaEE 6.0中. JSR 303 通过在Bean属性上标注类似于@NotNull.@Max等标准的注解指定校验规则 ... 
- Struts2 校验框架学习笔记
		Struts2 校验框架 Struts2 和Struts1同样也提供了校验框架,但在Struts2 已经不再把校验框架做为一个插件,而是已经内置到了Struts2中,而且配置起来更为简单方便,功能也更 ... 
随机推荐
- Linux之防火墙与端口
			1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放.下面是命令实现: iptables -P INPUT DROPiptables -P FORWARD DROPiptable ... 
- redis.conf详细说明
			daemonize yes #---默认值no,该参数用于定制redis服务是否以守护模式运行.--- pidfile /var/run/redis.pid #默认值/var/run/redis.pi ... 
- 【Foreign】Game [博弈论][DP]
			Game Time Limit: 20 Sec Memory Limit: 512 MB Description 从前有个游戏.游戏分为 k 轮. 给定一个由小写英文字母组成的字符串的集合 S, 在 ... 
- 【Foreign】画方框 [主席树]
			画方框 Time Limit: 10 Sec Memory Limit: 256 MB Description Input Output 输出一行一个整数,表示 CD 最多可能画了几个方框. Sam ... 
- 【BZOJ】1610: [Usaco2008 Feb]Line连线游戏
			[算法]计算几何 [题解]计算所有斜率排序去重. 实数判断相等用fabs(...)≤eps. ★斜率题一定要注意斜率不存在的情况!!! 其实我觉得这份代码可以hack的…… #include<c ... 
- 【51NOD-0】1118 机器人走方格
			[算法]DP #include<cstdio> #include<algorithm> using namespace std; ,maxn=; int f[maxn][max ... 
- 【SPOJ】1182 Sorted bit sequence
			[算法]数位DP [题解]动态规划 写了预处理函数却忘了调用是一种怎样的体验? #include<cstdio> #include<cstring> #include<a ... 
- 【洛谷 P2756】 飞行员配对方案问题(二分图匹配,最大流)
			题目链接 这不是裸的二分图匹配吗? 而且匈牙利算法自带记录方案.. 但既然是网络流24题,那就用网络流来做吧. 具体就是从源点向左边每个点连一条流量为1的边,两边正常连边,流量都是一,右边所有点向汇点 ... 
- bootstrap-table设置某列序号自增
			col = [{ field: 'SerialNumber', title: '序号', formatter: function (value, row, index) { return index+ ... 
- python中multiprocessing模块
			multiprocess模块那来干嘛的? 答:利用multiprocessing可以在主进程中创建子进程.Threading是多线程,multiprocessing是多进程. #该模块和Threadi ... 
