Struts数据效验
表单数据的验证:
前台验证:主要是通过JS验证, 表达数据是否合法!
后台验证:通过后台java代码进行验证!
Struts也提供了数据效验的方式!
Struts数据效验, 通过拦截器完成:
<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
代码方式验证Action中所有的方法:
步骤:
1. 搭建struts环境
2. login.jsp
3.UserAction.java
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <!-- 修改struts标签默认的样式: 不让换行 <style type="text/css"> ul{ display: inline; } ul li{ display: inline; color: red; } </style> --> </head> <body> <%@taglib uri="/struts-tags" prefix="s" %> <br/> <form method="post" action="${pageContext.request.contextPath }/vuser_register"> 用户名:<input type="text" name="user.userName"> <s:fielderror fieldName="user.userName"></s:fielderror> <br/> 密码:<input type="text" name="user.pwd"> <s:fielderror fieldName="user.pwd"></s:fielderror> <br/> 邮箱:<input type="text" name="user.email"><br/> 生日:<input type="text" name="user.birth"><br/> <input type="submit" value="注册"><br/> </form> </body> </html>
User类
package com.gqx.validate; import java.util.Date; public class User { private String userName; private String pwd; private String email; private Date birth; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } @Override public String toString() { return "User [birth=" + birth + ", email=" + email + ", pwd=" + pwd + ", userName=" + userName + "]"; } }
UserAction.java
package com.gqx.validate; import com.opensymphony.xwork2.ActionSupport; /** * 注意:如果要想用struts的数据效验功能,必须继承ActionSupport或实现相关接口 * @author GQXing * */ public class UserAction extends ActionSupport{ //封装数据 private User user=new User(); public void setUser(User user) { this.user = user; } public User getUser() { return user; } @Override public void validate() { // 用户名非空 if (user.getUserName() == null || "".equals(user.getUserName())) { // 保存错误信息 super.addFieldError("userName", "用户名必须填写!"); } // 密码 if (user.getPwd() == null || "".equals(user.getPwd())) { super.addFieldError("pwd", "密码必填"); } } // 业务方法 public String register() { System.out.println(user); return SUCCESS; } // 列表展示(不用数据效验) public String list() { return SUCCESS; } }
也可以对指定方法进行验证,如只对register方法验证,而不对list方法验证
package com.gqx.validate; import com.opensymphony.xwork2.ActionSupport; /** * 注意:如果要想用struts的数据效验功能,必须继承ActionSupport或实现相关接口 * @author GQXing * */ public class UserAction extends ActionSupport{ //封装数据 private User user=new User(); public void setUser(User user) { this.user = user; } public User getUser() { return user; } public void validateRegister() { // 用户名非空 if (user.getUserName() == null || "".equals(user.getUserName())) { // 保存错误信息 super.addFieldError("userName", "用户名必须填写!"); } // 密码 if (user.getPwd() == null || "".equals(user.getPwd())) { super.addFieldError("pwd", "密码必填"); } } // 业务方法 public String register() { System.out.println(user); return SUCCESS; } // 列表展示(不用数据效验) public String list() { return SUCCESS; } }
XML方式验证Action中所有的方法:
繁琐,设计很多重复的验证逻辑!例如:非空验证、数值验证、email、日期等。
Struts对于常用的验证,进行了封装,即提供了验证器, 验证指定的常用业务逻辑!
Struts提供的所有验证器——路径:xwork-core-2.3.4.1.jar/com.opensymphony.xwork2.validator.validators/default.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator Definition 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd"> <!-- START SNIPPET: validators-default --> <validators> <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/> <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/> <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/> <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/> <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> </validators> <!-- END SNIPPET: validators-default -->
如果写xml,从而定义验证规则:
1)XML文件名称语法: ActionClassName-validation.xml
注意:此xml需要与当期要验证的action在同一个目录:
举例:UserAction-validation.xml
2) 写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> <!-- 验证Email --> <field name="user.email"> <field-validator type="email"> <message>邮箱格式错误!</message> </field-validator> </field> <!-- 验证的每一个字段用field表示 --> <field name="user.userName"> <!-- 指定使用的验证器 --> <field-validator type="requiredstring"> <!-- 验证失败的错误提示信息 --> <message>用户名不能为空!</message> </field-validator> </field> <!-- 验证pwd --> <field name="user.pwd"> <!-- 非空 --> <field-validator type="requiredstring"> <message>密码不能为空!</message> </field-validator> <!-- 长度 --> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">8</param> <message>密码必须为6-8位!</message> </field-validator> </field> <!-- 验证日期 --> <field name="user.birth"> <field-validator type="date"> <message>日期格式不对!</message> </field-validator> </field> </validators>
XML方式验证Action中指定的方法:
与上面xml验证方式大致相同: 验证xml文件内容不变;
文件命名:
语法:ActionClassName-ActionName-validation.xml
举例:UserAction-user_register-validation.xml
验证UserAction中的register方法
验证总结
代码:
重写validate() , 验证action所有方法
Validate方法名(), 验证指定“方法名”的方法
Xml:
验证所有方法: ActionClassName-validation.xml
验证指定方法: ActionClassName-actionName-validation.xml
代码验证,
比较灵活,可以满足所有的需求.
比较繁琐,要写重复的验证判断逻辑!
适合: 表单字段较少的情况用!
XML验证:
通用,但不够灵活; 可以验证特定简单的业务。
适合: 验证表单字段较多,可以大大简化代码!
(配置文件过多)
Struts数据效验的更多相关文章
- struts 数据验证
1. validate()验证 将对页面表单验证的内容写到validate()方法中,实现验证和业务处理内容的分离 在Action中添加 validate()方法 public void vali ...
- 一脸懵逼学习Struts数据校验以及数据回显,模型驱动,防止表单重复提交的应用。
1:Struts2表单数据校验: (1)前台校验,也称之为客户端校验,主要是通过Javascript编程的方式进行数据的验证. (2)后台校验,也称之为服务器校验,这里指的是使用Struts2通过xm ...
- Struts数据验证
Action类继承了ActionSupport类,而该类实现了Action.Validateable.ValidationAware.TextProvider.LocaleProvider和Seria ...
- SpringMVC的数据效验
Spring MVC本身没有数据校验的功能,它使用Hibernate的校验框架来完成. 1.导入pom节点 <!-- https://mvnrepository.com/artifact/org ...
- struts数据回显
数据回显,必须要用struts标签! Action中: // 进入修改页面 public String viewUpdate() { // 模拟一个对象(先获取一个id,再根据id调用service查 ...
- springMVC-JSR303数据效验
JSR 303 是java为Bean数据合法性校验提供的标准框架, 它已经包含在javaEE6.0中 JSR 303 通过Bean属性上标注类似于@NotNull.@Max等标准的注解指定校验规则, ...
- Struts数据回显和模型驱动
prams拦截器,可以把请求数据自动填充的action的属性中 举例1: JSP <input type=text name=userName /> <input type=text ...
- Struts2数据校验
Struts2数据校验 1.常见数据校验方法 表单数据的校验方式: 表单中的数据必须被效验以后才能够被使用,常用的效验方式分为两种: 前台校验:也称之为客户端效验,主要是通过JS编程的方式进行表单数据 ...
- Action开发、通配符、路径问题和struts中常量用法
1.action开发 开发的几种方式 (1).继承自ActionSupport,(如果用struts的数据效验功,能必须必须使用此功能,因为ActionSupport实现了数据效验的接口) publi ...
随机推荐
- node.js模块之Buffer模块
http://nodejs.org/api/buffer.html Pure JavaScript is Unicode friendly but not nice to binary data. W ...
- 关于rewriteRule的一个小问题
RewriteEngine on # RewriteRule ^test.php$ modrewrite.php# RewriteRule ^(.*) http://www.baidu.com [L] ...
- 【HDOJ】2890 Longest Repeated subsequence
后缀数组的应用.和男人八题那个后缀数组差不多. /* 2890 */ #include <iostream> #include <sstream> #include <s ...
- 1471. Tree(LCA)
1471 先学习了下tarjan算法的LCA 离线算法 它是先知道询问的结点对 在遍历的时候就已经算出来了 看篇图解 讲的很清楚 #include <iostream> #include& ...
- tar 命令打包,除了某个目录剩下的都打包
tar czvf beifen.tar.gz ./webdata --exclude webdata/uploadfiles
- Java [leetcode 19]Remove Nth Node From End of List
题目描述: Given a linked list, remove the nth node from the end of list and return its head. For example ...
- iOS application: how to clear notifications?
http://stackoverflow.com/questions/8682051/ios-application-how-to-clear-notifications up vote105down ...
- 【转】 Homebrew – OSX下简单的包管理系统
很多linux用户很喜欢 (Debian/Ubuntu)系列的apt包管理系统和(Redhat/Fedora)系列的yum包管理系统. 包括Windows用户都有多种方便的软件管理工具,如:360软件 ...
- LA 6540 Fibonacci Tree
以前做过的题···重新做一遍之后怎么做怎么wa···后来GG了···第二天看不知道为啥A了···难道我失忆了? 题意:无向图,边有黑色和白色两种颜色,求是否存在一个生成树中白边的个数是斐波那契数. 解 ...
- Live555研究之三 RTSP Server处理请求
RTSP Server会不断用select查询是否有socket连接,如果有则在(*handler->handlerProc)(handler->clientData, resultCon ...