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

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

接下来我给大家讲解一下用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. [Swift实际操作]八、实用进阶-(3)闭包在定时任务、动画和线程中的使用实际操作

    闭包的使用相当广泛,它是可以在代码中被传递和引用的具有独立功能的模块.双击打开之前创建的空白项目.本文将演示闭包在定时任务.动画和线程中的使用.在左侧的项目导航区,打开视图控制器的代码文件:ViewC ...

  2. 【vim】搜索与替换

    1. 搜索 命令 功能 备注 * 向下搜索光标所在处的词 n下一个,N上一个 # 向上搜索光标所在处的词 同上 [+<Ctrl>+i 跳转到光标所在处的变量的声明 使用tag [+< ...

  3. [VB6.0-->VB.NET]关于VB6.0升级到VB.NET的微软官方文档

    升级流程大体是这样的: 1.用VS2008打开Vb6.0的工程(此时针对语言层面自动升级). 注: VS更新多版了(当前最新VS2017),用最新版再打开2008升级后的工程的时候还是会有自动升级,相 ...

  4. python3字典:获取json响应值来进行断言的用法详解

    在Python中我们做接口经常用到一些json的返回值我们常把他转化为字典,在前面的python数据类型详解(全面)中已经谈到对字典的的一些操作,今天我们就获取json返回值之后,然后转化为字典后的获 ...

  5. python接口自动化2-发送post请求详解(二)

    前言 发送post的请求参考例子很简单,实际遇到的情况却是很复杂的,首先第一个post请求肯定是登录了,但登录是最难处理的.登录问题解决了,后面都简单了. 一.查看官方文档 1.学习一个新的模块,其实 ...

  6. iOS --UIScrollView的学习(二)

    1.接着上一次的说:http://www.cnblogs.com/fengzhihao/p/5287734.html,这次讲一下UISCrollView的缩放功能. 2.当用户在UIScrollVie ...

  7. QuantLib 金融计算——基本组件之 DayCounter 类

    目录 QuantLib 金融计算--基本组件之 DayCounter 类 DayCounter 对象的构造 一些常用的成员函数 如果未做特别说明,文中的程序都是 Python3 代码. QuantLi ...

  8. python学习,day4:装饰器的使用示例2

    这个例子比较复杂 # coding=utf-8 # Author: RyAn Bi user,passwd = ' #输入用户名密码 def auth(auth_type): #装饰器第一层,确定鉴权 ...

  9. 从源码层面解析SpringIOC容器

    Spring IOC容器继承关系图 MessageSource支持消息国际化.ResouceLoader资源加载.BeanFactory创建Bean.ApplicationEventPublisher ...

  10. archlinux中gedit乱码的解决方法

    转自https://blog.csdn.net/oFAITH12345/article/details/24962545 例如:gedit key.c --encoding=GB18030 打开文件后 ...