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 ...
随机推荐
- idea部署tomcat:tomee required to support ear/ejb de。。
要确定artifact 的type是使用的web application :exploded类型,使用javaee application :exploded就会报这个错误.
- iOS --高仿QQ空间页面
1.首先分析一下qq空间页面的主要2个功能: 1)随着TableView的向上滑动导航栏的颜色渐变,变化过程是从透明变成白色. 2)随着TableView的向下滑动,图片随着offset放大. 2.首 ...
- javasript 的DOM 节点操作:创建,插入,删除,复制以及查找节点
DOM 含义: DOM 是文档对象模型(Document Object Model) 是一种基于浏览器编程的一套API 接口,我W3C 出台推荐的标准.其赋予了JS 操作节点的能力,当网页被加载时,浏 ...
- 架构师养成记--37.简单shell编程
一.HelloWord.sh echo 表示打印,可以在sh文件中写诸如pwd.ls 这样的命令,使用命令的时候尽量使用全路径. #!/bin/sh #this is my first sh echo ...
- 关于开发环境无法运行applet
测试一下IE java vm 如果没有正确显示出来,说明java vm插件没有装好: 我用Uninstalle 来清理注册表:重装jdk 1.6_45
- (转)错误"因为数据库正在使用,所以无法获得对数据库的独占访问权"的解决方案
引发原因:是因为我在还原数据库的时候,还有其他的用户正在使用数据库,所以就会出现以上提示. 解决方法:1,设置数据库在单用户模式下工作.设置方法:在需要还原的数据库上右击,在右键菜单命令上选择&quo ...
- git 检出项目部分目录(稀疏检出)
git clone 会把整个项目都clone下来,对于大项目git status比较慢,每次pull时候也拉取一些无关的代码或者文件:git可以实现像svn一样检出部分目录 步骤: git clone ...
- 深度学习(十六) ReLU为什么比Sigmoid效果好
sigmoid: Relu: 为什么通常Relu比sigmoid和tanh强,有什么不同?主要是因为它们gradient特性不同. 1.sigmoid和tanh的gradient在饱和区域非常平缓,接 ...
- [心平气和读经典]The TCP/IP Guide(002)
The TCP/IP Guide [Page 41, 42] Goals of The TCP/IP Guide | 本书的目标 Every author who sets out to write ...
- 文本相似度分析(基于jieba和gensim)
基础概念 本文在进行文本相似度分析过程分为以下几个部分进行, 文本分词 语料库制作 算法训练 结果预测 分析过程主要用两个包来实现jieba,gensim jieba:主要实现分词过程 gensim: ...