为什么要用验证框架?

当验证规划比较复杂时,Action类的代码江边的非常繁琐,假如我们要对电话号码进行验证,是非常麻烦的。

验证框架的优点

Struts2中内置了一个验证框架,将常用的验证规则进行了编码实现,使用验证框架时,用户无需再进行编码,只要在外部配置文件中指定某个字段需要进行的验证类型,并提供出错误信息即可,从而大大减轻了开发者的负担,提高开发效率

接下来我们先看一个案例了解一下

jsp页面(以注册为例)

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>注册页面</title> </head> <body>
<h2>用户注册</h2> <s:form action="regist" method="post">
<s:textfield name="info.username" label="用户名" ></s:textfield>
<br/> <s:textfield name="info.phone" label="电话号码"></s:textfield>
<br/> <s:textfield name="info.password" label="密码"></s:textfield>
<br/> <s:textfield name="okpwd" label="确认密码"></s:textfield>
<br/> <s:submit value="注册"></s:submit> </s:form> </body>
</html>

regist.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>成功页面</title> </head> <body>
欢迎您!${info.username }
</body>
</html>

success.jsp

实体类(UserInfo)

package cn.happy.entity;

public class UserInfo {
private String username;
private String password;
private String phone; public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
} 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;
}
}

UserInfo.java

接下来看一下Action包下的类

package cn.happy.action;

import cn.happy.entity.UserInfo;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

    private UserInfo info;
private String okpwd; @Override
public String execute() throws Exception {
return SUCCESS;
} public UserInfo getInfo() {
return info;
}
public void setInfo(UserInfo info) {
this.info = info;
}
public String getOkpwd() {
return okpwd;
}
public void setOkpwd(String okpwd) {
this.okpwd = okpwd;
}
}

UserAction.java

<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <!-- 用户名:不能为空 长度在6-10之间 -->
<field name="info.username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空</message>
</field-validator> <field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message>用户名长度必须在${minLength}和${maxLength}之间</message>
</field-validator> </field> <!-- 验证密码-->
<field name="info.password">
<field-validator type="requiredstring">
<message>密码不能为空</message>
</field-validator>
</field> <!-- 确认密码 --> <field name="okpwd">
<field-validator type="fieldexpression">
<param name="expression">info.password==okpwd</param>
<message>密码和确认密码必须一致</message>
</field-validator>
</field> <!-- 验证电话号码 --> <field name="info.phone">
<field-validator type="requiredstring">
<message>电话号码不能为空</message>
</field-validator>
</field> <field name="info.phone">
<field-validator type="regex">
<param name="regex">^(\d{3,4}-){0,1}(\d{7,8})$</param>
<message>电话号码格式不正确</message>
</field-validator>
</field> </validators>

UserAction-validation.xml

常用验证规则:

编写配置文件(struts.xml)

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<!-- 修改文件 tomact不用重启 -->
<constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="regist" class="cn.happy.action.UserAction">
<result name="success">success.jsp</result>
<result name="input">regist.jsp</result>
</action>
</package>
</struts>

struts.xml

jar包

实现效果:

 实现数据校验的流程

 对输入的数据首先进行类型转换,并封装成Action属性

② 如果类型转换出现错误,就将错误提示保存到ActionContext,并封装到fieldError中

③ 类型转换执行完毕后,会根据项目的配置执行验证框架的校验,也可能通过执行validate()或者validateXxx()方法进行校验

④ 如果经过以上步骤都没有出现错误,那么将直接调用Action里用于处理用户请求的方法,然后根据结果类型转入相应的视图资源。一旦出现了错误,那么系统将直接返回输入数据的视图资源,后者通常由workflow拦截器处理

strus2验证框架的更多相关文章

  1. jQuery Validate验证框架详解

    转自:http://www.cnblogs.com/linjiqin/p/3431835.html jQuery校验官网地址:http://bassistance.de/jquery-plugins/ ...

  2. 【积累】validate验证框架的使用

    validate验证框架的使用:用验证框架可以很方便的验证前端页面输入的内容可以自定义验证方法 内容:0:环境搭建 1:基础用法 2:自定义用法 0:基本环境的搭建 0.1:下载js文件 0.2:引入 ...

  3. Struts2验证框架实例

    今天写了个Struts验证框架的实例,总算把验证框架弄清楚了. 上一篇Struts实例的action没有继承ActionSupport类,虽然也可以实现action的功能,但是却不能应用Struts提 ...

  4. struts2 的验证框架validation如何返回json数据 以方便ajax交互

    struts2 的验证框架validation简单,好用,但是input只能输出到jsp页面通过struts2的标签<s:fielderror  />才能取出,(EL应该也可以). 如果使 ...

  5. 【转】jquery validate验证框架与kindeditor使用需二次提交的问题

    原文:http://blog.csdn.net/wlsyn/article/details/11536399在使用jquery的验证框架对kindeditor富文本编辑器进行验证的过程中,发现提 交时 ...

  6. ValidationSugar表单验证框架-支持ASP.NET MVC ASP.NET WebFroM

    ValidationSugar表单验证框架的优点: 1.支持javascript端和后端的双重验证 (前端目前依赖于jquery.validate.js,也可以自已扩展) 2.代码简洁 3.调用方便 ...

  7. Struts2(十二)使用验证框架验证数据较验

    一.数据验证 1.1.为什么要进行数据验证 对数据的合法性进行检查,只允许合法的数据进入应用程序 1.2.在哪里实现数据验证 客户端验证: 数据提交前在客户端验证 可使用JavaScript或者JQu ...

  8. Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议(转载)

    Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...

  9. 关于struts2 验证框架在联网的时候可以用,不联网不起作用的问题

    这是一个让我很头痛的问题,我是在一个其他的项目框架的基础上来开发新的项目. 当使用struts验证框架时,突然发现这个验证不起作用了,我就纳闷了之前用这个开发的项目好好的怎么到我这就不能用了呢? xm ...

随机推荐

  1. Hibernate框架与Mybatis框架的对比

    学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/ ...

  2. 表达式括号匹配(stack)

    题目描述 假设一个表达式由英文字母(小写).运算符(+.-.*./)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右括号是否匹配,若匹配,则返回“YES”:否则返回 ...

  3. wampsever在线模式和离线模式有什么区别

    我们在开发网站的时候经常会使用到wampsever服务器,在测试项目的时候我们会经常发现,wampsever服务器在线模式和离线模式都可以使用并且测试,还有一个现象就是我们在测试无线网络,用手机访问的 ...

  4. HTML5学习笔记

    参考资料:http://www.runoob.com/html/html-tutorial.html 1.html5声明.将此html文档标记为html5文档 <!DOCTYPE html> ...

  5. Maven命令行使用:mvn clean package(打包)

    先把命令行切换到Maven项目的根目录,比如:/d/xxxwork/java/maven-test,然后执行命令:  mvn clean package 执行结果如下: [INFO] Scanning ...

  6. Redis安装配置

    Redis有服务端和客户端 服务端: 服务端下载地址: https://github.com/dmajkic/redis/downloads 解压后: 然后进入CMD命令: 不要关闭此命令窗(关闭服务 ...

  7. MySQL的SSL加密连接与性能开销

    本文转载自:http://www.innomysql.net/article/23959.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) Contents [hide] 1 前言 ...

  8. karma的基础应用之与fis结合

    一.介绍 1. karma是单元测试运行框架,可以集成jasmine断言库,也支持babel. 2.fis是百度前端团队开源推出的前端工程化管理工具. 二.karma的基础应用 1.karma的基础a ...

  9. php 文件下载

    public function down() { header("Content-type:text/html;charset=utf-8"); $file_name = I('g ...

  10. 使用AngularJS实现简单:全选和取消全选功能

    这里用到AngularJS四大特性之二----双向数据绑定 注意:没写一行DOM代码!这就是ng的优点,bootstrap.css为了布局,JS代码也只是简单创建ng模块和ng控制器 效果: < ...