现在是科技的时代,大多数人都在网上购物了, 我们都碰到过相同的问题,各大网站弄的那些各种各样的注册页面,相信大家都深有体会。

有了这验证就很好的保证了我们的信息的准确性和安全性。

接下来我给大家讲解一下用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 数据校验之四兄弟的更多相关文章

  1. Struts2数据校验

    Struts2数据校验 1.常见数据校验方法 表单数据的校验方式: 表单中的数据必须被效验以后才能够被使用,常用的效验方式分为两种: 前台校验:也称之为客户端效验,主要是通过JS编程的方式进行表单数据 ...

  2. struts2 数据校验

    通过struts2中延续自xwork框架的validation.xml配置方式进行数据校验,因struts2 下存在三种请求参数的注入方式,固按照不同注入方式对validation.xml的配置进行总 ...

  3. 第六章、Struts2数据校验

    一.三种实现方式 ① 用validate()方法实现数据校验 继承ActionSupport类,该类实现了Validateable接口,该接口中定义了一个validate()方法,在自定义的Actio ...

  4. 06章 Struts2数据校验

    一.三种实现方式 ① 用validate()方法实现数据校验 继承ActionSupport类,该类实现了Validateable接口,该接口中定义了一个validate()方法,在自定义的Actio ...

  5. struts2 之 struts2数据校验

    1. 数据校验一般分为2类:前端的校验(js校验),后端的校验(java代码):实际开发中大部分情况下都是采用js校验.在对数据安全要求较高的情况下可能会采用后端验证. 2.  Struts2提供了后 ...

  6. struts2数据校验与国际化

    数据校验: Action里的validate()方法能校验action类所有的方法,如果有错,如:addFieldError,会自动返回到workflow校验拦截器不向下继续进行,不用return i ...

  7. Struts2数据校验方法

    方法: 1.在Action类中execute()方法中进行校验. 优点:Action类无需继承框架中的类. 缺点:(1)当有多个校验时,代码重复,违反高内聚,低耦合. 2.重写框架ActionSupp ...

  8. Struts2 数据校验流程

  9. Struts2第十篇【数据校验、代码方式、XML配置方式、错误信息返回样式】

    回顾以前的数据校验 使用一个FormBean对象来封装着web端来过来的数据 维护一个Map集合保存着错误信息-对各个字段进行逻辑判断 //表单提交过来的数据全都是String类型的,birthday ...

随机推荐

  1. JSP的介绍及语法详解

    一.简介 > HTML - HTML擅长显示一个静态的网页,但是不能调用Java程序. > Servlet - Servlet擅长调用Java程序和后台进行交互,但是它不擅长显示一个完整的 ...

  2. spring cloud ribbon源码解析(一)

    我们知道spring cloud中restTemplate可以通过服务名调接口,加入@loadBalanced标签就实现了负载均衡的功能,那么spring cloud内部是如何实现的呢? 通过@loa ...

  3. 浅谈javascript和python语言的深拷贝

    深拷贝: 之前在开发中我遇到一个很大的bug,经过我多次调试之后我发现原本应该有保存数据的地方数据全部被清空,仔细一看发现原来是被人为删除,明明操作的是一个副本,为什么原本也会跟着一起被删除呢?经过了 ...

  4. 往word中插入美观的代码

    http://www.planetb.ca/syntax-highlight-word 选择需要的语言,然后Show Highlighted,复制跳转页面显示的代码至word即可

  5. Java网络编程基础之TCP粘包拆包

    TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想象河里的流水,他们是连成一片的,其间并没有分界线.TCP底层并不了解上层业务数据的具体含义,他会根据TCP缓冲区的实 ...

  6. Spark 概念学习系列之Spark Core(十五)

    不多说,直接上干货! 最关键的是转换算子Transformations和缓存算子Actions. 主要是对RDD进行操作. RDD Objects  ->  Scheduler(DAGSched ...

  7. java算法----------二叉树的遍历

    二叉树的遍历分为前序.中序.后序和层序遍历四种方式 首先先定义一个二叉树的节点 //二叉树节点 public class BinaryTreeNode { private int data; priv ...

  8. Maven项目中Spring整合Mybatis

    Maven项目中Spring整合Mybatis 添加jar包依赖 spring需要的jar包依赖 <dependency> <groupId>org.springframewo ...

  9. Java Reflect

    Method method=demo.getMethod("sayChina");             method.invoke(demo.newInstance());   ...

  10. Android组件--意图(Intent)

    1. 隐示调用和显示调用 参考资料:http://blog.csdn.net/harvic880925/article/details/38399723 1.概念 1). 显式意图: 能从intent ...