Struts2 数据校验之四兄弟
现在是科技的时代,大多数人都在网上购物了, 我们都碰到过相同的问题,各大网站弄的那些各种各样的注册页面,相信大家都深有体会。
有了这验证就很好的保证了我们的信息的准确性和安全性。
接下来我给大家讲解一下用struts2怎么实现页面上简单的拦截。
方法一:
用execute()方法来实现
1.0创建一个UserInfo类
package cn.struts.entity; /**
* Created by accp on 2017/3/6.
*/
public class UserInfo {
//用户名
private String name;
//密码
private String pwd;
//电话
private String phone; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPwd() {
return pwd;
} public void setPwd(String pwd) {
this.pwd = pwd;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
}
}
2.0创建一个ExecuteAction继承ActionSupport
package cn.struts.action; import cn.struts.entity.UserInfo;
import com.opensymphony.xwork2.ActionSupport; /**
* Created by accp on 2017/3/6.
*/
public class ExecuteAction extends ActionSupport { //用户对象
private UserInfo user;
//确认密码
private String okpwd; @Override
public String execute() throws Exception {
//判断用户名是否为空
if (user.getName().length() == ) {
addFieldError("name", "用户名不能为空");
}
//判断密码是否为空
if (user.getPwd().length() == ) {
addFieldError("pwd", "密码不能为空");
}
//判断电号码是否为空
if (user.getPhone().length() == ) {
addFieldError("phone", "电话不能为空");
}
//判断两次输入的密码是否一致
if(!user.getPwd().equals(okpwd)){
addFieldError("userpwd", "两次密码不一致");
}
//这是最重要的判断
//判断上面是否还存在没有通过的验证
if (this.hasFieldErrors()) {
return "input";
}
return "success";
} public UserInfo getUser() {
return user;
} public void setUser(UserInfo user) {
this.user = user;
} public String getOkpwd() {
return okpwd;
} public void setOkpwd(String okpwd) {
this.okpwd = okpwd;
}
}
3.0编写struts.xml
<action name="executeAction" class="cn.struts.action.ExecuteAction">
<result>/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
4.0编写页面
index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<title>登陆页面</title>
<body>
<s:fielderror></s:fielderror>
<form action="execute" method="post">
用户名:<input name="user.name"><br/>
电话:<input name="user.phone"><br/>
密码:<input name="user.pwd"><br/>
确认密码:<input name="okpwd"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
success.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>成功页面</title>
</head>
<body>
欢迎你:<s:property value="user.name"></s:property></body>
</html>
效果如下:



这些就是我们注册时常常碰到的提示!!!!
方法二:
用validate方法来进行验证
创建实体类我们在这里就省略了,直接创建ValidateAction
1.0ValidateAction继承ActionSupport ,重写了validate()方法
package cn.struts.action; import cn.struts.entity.UserInfo;
import com.opensymphony.xwork2.ActionSupport; /**
* Created by accp on 2017/3/6.
*/
public class ValidateAction extends ActionSupport {
private UserInfo user;
private String okpwd;
@Override
public void validate() {
//判断用户名是否为空
if(user.getName().length()==){
addFieldError("name","用户名不能为空");
}
//判断密码是否为空
if(user.getPwd().length()==){
addFieldError("pwd","密码不能为空");
}
//判断电话是否为空
if(user.getPhone().length()==){
addFieldError("phone","电话不能为空");
}
//判断两次密码输入是否一致
if(!user.getPwd().equals(okpwd)){
addFieldError("userpwd", "两次密码不一致");
}
} public UserInfo getUser() {
return user;
} public void setUser(UserInfo user) {
this.user = user;
} public String getOkpwd() {
return okpwd;
} public void setOkpwd(String okpwd) {
this.okpwd = okpwd;
}
}
2.0struts.xml:
<!--validate验证-->
<action name="validate" class="cn.struts.action.ValidateAction">
<result>/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
我们只需要更改表单提交的名称即可。
3.0index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<title>登陆页面</title>
<body>
<s:fielderror></s:fielderror>
<form action="validate" method="post">
用户名:<input name="user.name"><br/>
电话:<input name="user.phone"><br/>
密码:<input name="user.pwd"><br/>
确认密码:<input name="okpwd"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
得到的效果跟上述方法一相同。
写到这里同学们有没有疑问?怎么没有验证长度,不可能我们注册或者登录时没有别的条件限制?
能想到这的都是经常上网站购物的..............
接下来我们讲解第三种方法
方法三:
上面我们也提到了可能有别的验证,比如说长度,格式等等之类的。在这里我们定义一个方法来实现。
1.0创建ValidateXxxAction继承ActionASupport
package cn.struts.action; import cn.struts.entity.UserInfo;
import com.opensymphony.xwork2.ActionSupport; /**
* Created by accp on 2017/3/6.
*/
public class ValidateXxxAction extends ActionSupport{ private UserInfo user;
private String okpwd;
//定义方法来做验证
public void validateRegist(){
//用户名的长度
if(user.getName().length()<){
addFieldError("name","用户名长度不能小于6位");
}
}
//这里一定要注意:这个方法名称与上面自己定义的方法的后半部分相同
public String regist(){
return SUCCESS;
}
@Override
public void validate() {
//判断用户名是否为空
if(user.getName().length()==){
addFieldError("name","用户名不能为空");
}
//判断密码是否为空
if(user.getPwd().length()==){
addFieldError("pwd","密码不能为空");
}
//判断电话是否为空
if(user.getPhone().length()==){
addFieldError("phone","电话不能为空");
}
//判断两次密码输入是否一致
if(!user.getPwd().equals(okpwd)){
addFieldError("userpwd", "两次密码不一致");
}
} public UserInfo getUser() {
return user;
} public void setUser(UserInfo user) {
this.user = user;
} public String getOkpwd() {
return okpwd;
} public void setOkpwd(String okpwd) {
this.okpwd = okpwd;
}
}
2.0struts.xml
<!--测试ValidateXxxAction -->
<action name="validatexxx" class="cn.struts.action.ValidateXxxAction" method="regist">
<result>/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
3.0index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<title>登陆页面</title>
<body>
<s:fielderror></s:fielderror>
<form action="validatexxx" method="post">
用户名:<input name="user.name"><br/>
电话:<input name="user.phone"><br/>
密码:<input name="user.pwd"><br/>
确认密码:<input name="okpwd"><br/>
<input type="submit" value="提交">
</form> </body>
</html>
效果图:



除了上述我们讲的这些验证方法之外,struts2框架自身也带有验证。
方法四:
1.0创建ValidateFramework继承ActionSupport
package cn.struts.action; import cn.struts.entity.UserInfo;
import com.opensymphony.xwork2.ActionSupport; /**
* Created by accp on 2017/3/6.
*/
public class ValidateFramework extends ActionSupport {
private UserInfo user;
private String okpwd; @Override
public String execute() throws Exception {
return SUCCESS;
} public UserInfo getUser() {
return user;
} public void setUser(UserInfo user) {
this.user = user;
} public String getOkpwd() {
return okpwd;
} public void setOkpwd(String okpwd) {
this.okpwd = okpwd;
}
}
2.0编写ValidateFramework-validation.xml文件
下图是框架验证中验证器的类型图:

<!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.name">
<!--自段不能为空-->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空</message>
</field-validator>
<!--判断长度是否符合-->
<field-validator type="stringlength">
<param name="maxLength"></param>
<param name="minLength"></param>
<message>用户名的长度必须在${minLength}到${maxLength}</message>
</field-validator>
</field>
<!--判断密码和确认密码-->
<field name="user.pwd">
<field-validator type="requiredstring">
<message>密码不能为空</message>
</field-validator>
</field>
<field name="okpwd">
<field-validator type="fieldexpression">
<param name="expression">user.pwd==okpwd</param>
<message>密码和确认密码必须一致</message>
</field-validator>
</field>
<!--判断电话-->
<field name="user.phone">
<filed-validator type="requiredstring">
<message>电话不能为空</message>
</filed-validator>
<field-validator type="regex">
<param name="regex">^(\d{,}-){,}(\d{,})$</param>
<message>电话格式不正确</message>
</field-validator>
</field>
</validators>
3.0编写index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<title>登陆页面</title>
<body>
<s:fielderror></s:fielderror>
<form action="regist" method="post">
用户名:<input name="user.name"><br/>
电话:<input name="user.phone"><br/>
密码:<input name="user.pwd"><br/>
确认密码:<input name="okpwd"><br/>
<input type="submit" value="提交">
</form> </body>
</html>
效果图:



我简单的讲述了几种在struts2中常用的验证方法,在真实的开发模式中有许许多多的方法可以实现。在这里只是传递一种思想,没有多少技术含量..........
Struts2 数据校验之四兄弟的更多相关文章
- Struts2数据校验
Struts2数据校验 1.常见数据校验方法 表单数据的校验方式: 表单中的数据必须被效验以后才能够被使用,常用的效验方式分为两种: 前台校验:也称之为客户端效验,主要是通过JS编程的方式进行表单数据 ...
- struts2 数据校验
通过struts2中延续自xwork框架的validation.xml配置方式进行数据校验,因struts2 下存在三种请求参数的注入方式,固按照不同注入方式对validation.xml的配置进行总 ...
- 第六章、Struts2数据校验
一.三种实现方式 ① 用validate()方法实现数据校验 继承ActionSupport类,该类实现了Validateable接口,该接口中定义了一个validate()方法,在自定义的Actio ...
- 06章 Struts2数据校验
一.三种实现方式 ① 用validate()方法实现数据校验 继承ActionSupport类,该类实现了Validateable接口,该接口中定义了一个validate()方法,在自定义的Actio ...
- struts2 之 struts2数据校验
1. 数据校验一般分为2类:前端的校验(js校验),后端的校验(java代码):实际开发中大部分情况下都是采用js校验.在对数据安全要求较高的情况下可能会采用后端验证. 2. Struts2提供了后 ...
- struts2数据校验与国际化
数据校验: Action里的validate()方法能校验action类所有的方法,如果有错,如:addFieldError,会自动返回到workflow校验拦截器不向下继续进行,不用return i ...
- Struts2数据校验方法
方法: 1.在Action类中execute()方法中进行校验. 优点:Action类无需继承框架中的类. 缺点:(1)当有多个校验时,代码重复,违反高内聚,低耦合. 2.重写框架ActionSupp ...
- Struts2 数据校验流程
- Struts2第十篇【数据校验、代码方式、XML配置方式、错误信息返回样式】
回顾以前的数据校验 使用一个FormBean对象来封装着web端来过来的数据 维护一个Map集合保存着错误信息-对各个字段进行逻辑判断 //表单提交过来的数据全都是String类型的,birthday ...
随机推荐
- 由一个场景分析Mysql的join原理
背景 这几天同事写报表,sql语句如下 select * from `sail_marketing`.`mk_coupon_log` a left join `cp0`.`coupon` c on c ...
- Java文件字节流和字符流
输入流:只能从中读取数据,不能向其写入数据. InputStream,Reader 输出流:只能向其中写入数据,不能从中读取数据. OutputStream, Writer 输入流是相对于程序而言,外 ...
- NSObject 中执行Selector 的相关方法
1. 对当前Run Loop中Selector Sources的取消 NSObject中的performSelector:withObject:afterDelay:方法将会在当前线程的Run Loo ...
- 将参数传递给ASP.NET Core 2.0中的中间件
问题 在ASP.NET Core的安装过程中,如何将参数传递给中间件? 解 在一个空的项目中添加一个POCO类来保存中间件的参数, publicclass GreetingOptions { publ ...
- Django分页类的封装
Django分页类的封装 Django ORM 封装 之前有提到(Django分页的实现)会多次用到分页,将分页功能封装起来能极大提高效率. 其实不是很难,就是将之前实现的代码全都放到类中,将需要用 ...
- OI中一些常见实用的套路【更新中】
数据结构 在维护树上路径时,如果只是点的独立的加减,可以考虑用括号序来维护(拆成两部分) 需要求树上很多路径中k近/距离和 一类,考虑点分治/在点分树上解决. 子树求和可以转化为DFS序上区间求和 树 ...
- po'j2559 Largest Rectangle in a Histogram 单调栈(递增)
Largest Rectangle in a Histogram Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 29498 ...
- MongoDB数据库及其Python用法
一 .命令行模式 mongo # 进入mongodb命令行模式 show dbs use taobao # 进入该数据库,如不存在则创建之 show tables # 条件操作符 (>) 大于 ...
- Mac 提交代码到Github
然后在GitHub上创建版本库(Repository),在GitHub首页上,点击“Create a New Repository”,如下所示(为了便于后面演示,创建README.md这步暂不勾选): ...
- C 标准库 - ctype.h
C 标准库 - ctype.h This header declares a set of functions to classify and transform individual charact ...