经过这两天的摸索,对验证框架还是有了一定的认识,纠正一下之前的错误,不管验证正确与否,都一定会执行action中的validate函数,把完整的后台验证用户注册贴出来了:
在项目根目录,也就是struts.xml相同的位置添加一个validators.xml,用来添加自定义规则.我只添加了一条自定义的规则,用来验证密码提示问题是否存在与相关数据库中,避免恶意提交(虽然我觉得也可能没有必要,但为了学一下怎么自定义验证规则,我就多此一举了):
自定义规则的配置文件:validators.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
<validator name="valueintable" class="com.validators.ValueInSpecificTable"/>
</validators>
相应的类:ValueInSpecificTable
package com.validators;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
public class ValueInSpecificTable extends FieldValidatorSupport{
private String table;
public String getTable() {
return table;
}
public void setTable(String table) {
this.table = table;
}
public void validate(Object object) throws ValidationException {
String fieldName = getFieldName();
String value = (String)this.getFieldValue(fieldName, object);
SessionFactory factory = new Configuration().configure().buildSessionFactory();
Session session = factory.openSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from " + table + " where problemContent = '" + value + "'");
transaction.commit();
if(query.list().isEmpty())
{
System.out.println("WARN: " + value + "is not in table: " + table);
addFieldError(fieldName, object);
}
session.close();
}
}
Action的验证配置文件(和Action放在相同目录下):UserRegisterSaveAction-vaidation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="register.user_id">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">16</param>
<message>用户名长度应在4到16之间</message>
</field-validator>
</field>
<field name="register.password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>密码不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">18</param>
<message>密码长度应在6到18个字符之间</message>
</field-validator>
</field>
<field name="register.pwd_repeat">
<field-validator type="fieldexpression">
<param name="fieldName">register.password</param>
<param name="fieldName">register.pwd_repeat</param>
<param name="expression"><![CDATA[register.password == register.pwd_repeat]]></param>
<message>密码必须和确认密码相等</message>
</field-validator>
</field>
<field name="register.problem_content">
<field-validator type="valueintable">
<param name="table">PromptProblem</param>
<message>请输入信息</message>
</field-validator>
</field>
<field name="register.answer">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>密码提示答案不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">2</param>
<param name="maxLength">10</param>
<message>密码提示答案长度应在2到10之间</message>
</field-validator>
</field>
<field name="register.nickname">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>昵称不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">2</param>
<param name="maxLength">10</param>
<message>昵称长度应在2到10之间</message>
</field-validator>
</field>
<field name="register.phone">
<field-validator type="regex">
<param name="fieldName">register.phone</param>
<param name="trim">true</param>
<param name="expression"><![CDATA[(((13[0-9]{1})|159|186|188|189|(15[0-9]{1}))+\d{8})]]></param>
<message>请输入正确的手机号码</message>
</field-validator>
</field>
<field name="register.email">
<field-validator type="email">
<message>请输入正确的邮箱地址</message>
</field-validator>
</field>
</validators>
感觉Struts2的验证框架还是蛮好用的,就是刚开始学的时候会比较烦一点,网上很多Struts1框架的配置方法堂而皇之地冠以Struts2的名号,相当无语~~~
分享到:
相关推荐
此后台管理系统采用了SSH框架,前端采用Struts2的S标签进行表单提交,采用JS进行简单的输入验证。后台与mysql数据库进行连接,dao-service-action都是一一对应,便于理解。此后台管理系统,一共有三个表,用户注册表...
该系统具有完整的用户注册、登录、浏览、搜索、购物车、订单管理、后台管理等功能,可以满足大部分网上书店的基本需求。 **主要功能:** 1. **用户注册与登录:** 用户可以通过注册功能创建账号,并通过登录功能...
因此,在具体设计实现该博客网站时,主要考虑了主流博客网站的几个主要功能:(1)博客的注册、登录验证功能(2) 网络用户通过关键字搜索博文功能(3) 最热门博客页面推荐浏览(4) 文章详细内容及相关评论显示(5) 博客...
6.4.2 spring 2.5集成mvc框架struts 2 411 6.4.3 ssh 2组合框架的基本开发步骤—eportal启程 414 6.5 小结 423 第2篇 实践篇 第7章 ssh 2热身——构建新闻发布系统 427 7.1 门户网站新闻资讯基本分类 427 7.2 ...
案例5-5 使用动态ActionForm实现身份验证中的新用户注册 193 5.4.3 Validator验证框架 197 案例5-6 使用Validator验证框架实现注册表单的数据验证 201 5.4.4 Struts标记库 206 案例5-7 采用Struts标记库...
因此,在具体设计实现该博客网站时,主要考虑了主流博客网站的几个主要功能:(1)博客的注册、登录验证功能(2) 网络用户通过关键字搜索博文功能(3) 最热门博客页面推荐浏览(4) 文章详细内容及相关评论显示(5) 博客...
前台模块:用户注册、登录、商品信息的浏览、购物车、订单和修改个人信息的功能 后台模块:管理员操作,包括图书的添加、图书信息的显示、修改和删除、会员列表、订单列表 Struts2 工作流程: 1. 读取并解析...
因此,在具体设计实现该博客网站时,主要考虑了主流博客网站的几个主要功能:(1)博客的注册、登录验证功能(2) 网络用户通过关键字搜索博文功能(3) 最热门博客页面推荐浏览(4) 文章详细内容及相关评论显示(5) 博客...
20.5.2 用户注册页面register.jsp 354 20.5.3 负责用户注册的Servlet类reg 356 20.5.4 生成随机验证码的imgNum类 358 20.5.5 用户登录页面index.jsp 359 20.5.6 验证用户登录信息的Servlet类login 360 20.6 显示宠物...
系统采用javaweb,基于B/S模式,Myeclipse为开发工具,mysql数据库进行数据存储.MVC三层思想,并且采用了ssh(struts2+spring+hibernate))框架进行开发,。本系统是独立的运行,不依附于其他系统,可移植,可扩展。代码的...
25、修复了新用户注册无法保存个性签名等若干bug 26、修复了三元运算符以兼容更多的web服务器(如jboss、resin等) 27、修复了广告数量不能整除时无法显示广告的问题 28、修复了“系统错误记录”无法写入的问题 ...
25、修复了新用户注册无法保存个性签名等若干bug 26、修复了三元运算符以兼容更多的web服务器(如jboss、resin等) 27、修复了广告数量不能整除时无法显示广告的问题 28、修复了“系统错误记录”无法写入的问题 ...
Lerx CMS V5版(以下简称V5版)采用了基于Java的SpringMVC框架,抛弃了V2-V3版本使用的Struts 2。SpringMVC框架更加安全、稳定。ORM持久化框架依旧使用Hibernate,版本为5.4。开发时采用的数据库为MySQL。是一个能快速...
第9章 BBS系统(Struts+MySQL实现) 403 教学视频:1小时46分 9.1 开发背景 404 9.2 需求分析 404 9.3 系统设计 404 9.3.1 系统目标 404 9.3.2 系统功能结构 405 9.3.3 业务流程图 405 9.3.4 系统预览 406 9.3.5 ...
系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的有效分离,提高了层次结构的清晰度,提高了复用的粒度降低了开发代价和维护代价,同时保证了软件的质量使其更具有鲁棒性和可维护性。...
系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的有效分离,提高了层次结构的清晰度,提高了复用的粒度降低了开发代价和维护代价,同时保证了软件的质量使其更具有鲁棒性和可维护性。...
系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的有效分离,提高了层次结构的清晰度,提高了复用的粒度降低了开发代价和维护代价,同时保证了软件的质量使其更具有鲁棒性和可维护性。...
系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的有效分离,提高了层次结构的清晰度,提高了复用的粒度降低了开发代价和维护代价,同时保证了软件的质量使其更具有鲁棒性和可维护性。...
\contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...