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 ...
随机推荐
- redis cluster 的ERR max number of clients reached 问题排查
早上发现微服务连不上redis cluster了,看来下日志如下 [root@win-jrh378d7scu 7005]# bin/redis-cli -c -h 15.31.213.183 -p 7 ...
- mxonline实战7,模板继承和模板标签
对应github地址:https://github.com/pshyms/django/tree/master/mxonline/7_day 一. 定制不同页面中样式相同,内容不同的模 ...
- Class文件分析
java源码和class文件 源码: package classloader; public class TestCase { private int value; public int test() ...
- Web安全篇之SQL注入攻击
在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源:http://www.2cto.com/article/201310/250877.html ps:直接copy,格式有点问 ...
- 使用GPIO监听中断
#include<stdlib.h> #include<stdio.h> #include<string.h> #include<unistd.h> # ...
- ltp-ddt eth过程中遇到的问题
eth_iperf_tcp ETH_S_PERF_IPERF_TCP_INTPACING_8K_1448B source 'common.sh'; iface=`get_eth_iface_name. ...
- shell-009:删除字母
把一个文件里的前100行中有字母的行删除:再把101-200行的字母去掉 #!bin/bashsed '101.200s/[a-zA-Z]//g' filesed -n '1.100'p file | ...
- webstorm缩进配置
https://blog.csdn.net/m0_37604745/article/details/80076770 设置代码缩进1. 依次打开files —- settings —- Editor ...
- (转)CentOS 7 安装 Docker
原文:http://www.cnblogs.com/stulzq/p/7743073.html http://www.cnblogs.com/stulzq/p/8629165.html-------- ...
- java调用svnkit工具类上传本地文件到svn服务器
package org.jenkinsci.plugins.svn.upload.step; import java.io.*; import org.tmatesoft.svn.core.SVNCo ...