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

一、Action类下直接参数的校验配置:

  • web.xml文件配置struts过滤器:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
  • bean文件:因直接在action类下进行注入及验证,不涉及bean文件,固略;
  • RegistServiceDao文件存储注册业务逻辑,略;
  • Action文件:
package com.action

public class RegAction extends ActionSupport{
private String name;
private String password;
private String gender;
private String email;
private String address; private User userInfo;
//setter和getter方法略; public User setInfo(){
User info = new User();
info.setname(this.name);
info.setpassword(this.password);
info.setgender(this.gender);
info.setemail(this.email);
info.setaddress(this.address); return info;
} public String regist(){
RegistServiceDao rsd = new RegistServiceDao();
userInfo = setInfo();
if(rsd.regist(usrInfo)){
return "success";
}else{
return "input";
}
}
}
  • struts配置文件配置action:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts>
<package name="default" extends="struts-defualt">
<action name="regist" class="com.action.RegistAction">
<result name="success">success.jsp</result>
<result name="INPUT">regist.jsp</result>
</action>
</package>
</struts>

****

  • validation.xml文件配置校验器,命名规则为<ActionClassName>-<aliasName>-validation.xml,文件必须放在action文件的同目录下;  

  RegActoin-regiest-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators>
<feild name="name">
<feild-validator type="requiredString">
<message>用户名不能为空</message>
</feild-validator>
</feild>
<feild name="password">
<feild-validator type="requiredString">
<message>密码不能为空</message>
</feild-validator>
</feild>
<feild name="gender">
<feild-validator type="requiredString">
<message>性别不能为空</message>
</feild-validator>
</feild>
<feild name="email">
<feild-validator type="email">
<message>油箱格式不正确</message>
</feild-validator>
</feild>
</validators>

二、DomainModel的注入方式下的数据校验:

  • web.xml配置文件无变化,同第一种;
  • bean文件,包含setter和getter的完整bean文件:
package com.entity

public class User{
private String name;
private String password;
private String gender;
private String email;
private String address; public User(){} public User(String name,String password,String gender,String email,String address){
this.name = name;
this.password = password;
this.gender = gender;
this.email = email;
this.address = address;
} //setter和getter方法略
}
  • RegistServiceDao文件存储注册业务逻辑,略;
  • Action文件,利用User对象注入数据,添加user的getter和setter方法,同时调用字段值时亦通过对象(user.getName()):
package com.action

public class RegAction extends ActionSupport{

    //无需实例化User
private User user; public User getUser(){
return user;
} public void setUser(User user){
this.user = user;
} public String regist(){
RegistServiceDao rsd = new RegistServiceDao();
if(rsd.regist(user)){
return "success";
}else{
return "input";
}
}
}
  • struts配置文件配置Action,同第一种;

********

  • validation.xml文件配置配置校验器,校验user对象的字段需通过visitor校验器,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators>
<field name="user">
<field-validator type="visitor">
<param name="context">abc</param>
<param name="appendPrefix">true</param>
</field-validator>
</field>
</validators>
  • User-abc-validation.xml文件配置visitor校验,命名规则为类似Action的校验配置文件,文件位置亦必须与实体类同一目录下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators>
<feild name="name">
<feild-validator type="requiredString">
<message>用户名不能为空</message>
</feild-validator>
</feild>
<feild name="password">
<feild-validator type="requiredString">
<message>密码不能为空</message>
</feild-validator>
</feild>
<feild name="gender">
<feild-validator type="requiredString">
<message>性别不能为空</message>
</feild-validator>
</feild>
<feild name="email">
<feild-validator type="email">
<message>油箱格式不正确</message>
</feild-validator>
</feild>
</validators>

!!

  • jsp文件改动,因DomainModel下的注入方式,对参数设定的字段名称需要加对象实例的前缀(user.name):
<s:form action = "regist" method = "post">
<s:textfield name="user.name" label="用户名"/>
<s:password name="user.password" label="密码"/>
<s:texfield name="user.gender" label="性别"/>
<s:texfield name="user.email" label="油箱"/>
<s:texfield name="user.address" label="地址"/>
<s:submit/>
</s:form>

三、ModelDriven注入下的数据校验,与域模型相比,主要是Action及jsp注入参数发生变化,同时需要对visitor校验器参数进行调整:

  • web.xml配置文件无变化;
  • bean文件无变化;
  • RegServiceDao文件无变化;
  • Action文件,需做以下修改:
    • 声明ModelDriven接口(泛型接口);
    • 需要声明getModel方法,同时对User类进行实例化;
    • 无需添加bean对象的getter和setter方法;
package com.action

public class RegAction extends ActionSupport implements ModelDriven<User>{

    //无需实例化User
private User user; public User getModel(){
if(user!=null){
return user;
}else{
user = new User();
return user;
}
} public String regist(){
RegistServiceDao rsd = new RegistServiceDao();
if(rsd.regist(user)){
return "success";
}else{
return "input";
}
}
}
  • struts文件配置Action无变化;

********

  • validation.xml文件配置校验器,同第二种,使用visitor校验器,需要修改如下两个参数:

    • field标签的name属性为:model;
    • field下param标签的name为"appendPrefix" 属性的值修改为false(字段不再需要添加bean对象前缀);
  • User-abc-validation.xml配置校验器无变化;

!!

  • jsp页面需做简单修改,接收参数不需添加bean对象前缀
<s:form action = "regist" method = "post">
<s:textfield name="name" label="用户名"/>
<s:password name="password" label="密码"/>
<s:texfield name="gender" label="性别"/>
<s:texfield name="email" label="油箱"/>
<s:texfield name="address" label="地址"/>
<s:submit/>
</s:form>

struts2 数据校验的更多相关文章

  1. Struts2数据校验

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

  2. 第六章、Struts2数据校验

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

  3. 06章 Struts2数据校验

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

  4. struts2 之 struts2数据校验

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

  5. struts2数据校验与国际化

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

  6. Struts2数据校验方法

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

  7. Struts2 数据校验之四兄弟

    现在是科技的时代,大多数人都在网上购物了, 我们都碰到过相同的问题,各大网站弄的那些各种各样的注册页面,相信大家都深有体会. 有了这验证就很好的保证了我们的信息的准确性和安全性. 接下来我给大家讲解一 ...

  8. Struts2 数据校验流程

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

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

随机推荐

  1. 洛谷 1004 dp或最大费用流

    思路: dp方法: 设dp[i][j][k][l]为两条没有交叉的路径分别走到(i,j)和(k,l)处最大价值. 则转移方程为 dp[i][j][k][l]=max(dp[i-1][j][k-1][l ...

  2. isMobile

    var isMobile = { Android: function() { return navigator.userAgent.match(/Android/i); }, BlackBerry: ...

  3. python学习03——设计,与input有关

    笨办法学python第36节,我写的代码如下: from sys import exit def rule(): print "Congratulations! You made the r ...

  4. http post和put区别

    POST是用来提交数据的.提交的数据放在HTTP请求的正文里,目的在于提交数据并用于服务器端的存储,而不允许用户过多的更改相应数据(主要是相对于在url 修改要麻烦很多).PUT操作是幂等的.所谓幂等 ...

  5. C++小项目:directx11图形程序(七):modelclass

    模型类是世界空间中的表示物体的类,那么他的所做的事就是加载模型,移动模型,渲染模型 modelclass.h #pragma once #include <d3d11.h> #includ ...

  6. int->string-------------c

    void intToString(int n,char a[]){ int i=1,m=n; while((n/=10)!=0)  i++; int j=0; for(;j<i;j++){  a ...

  7. Ubuntu下freeradius-server的安装

    一.安装 (1)更新 #apt-get update (2)下载 链接:ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.2.9. ...

  8. NAT123内网映射端口

    在无内网路由管理员权限的情况下,需要将内网web应用暴露到公网访问,此时需要用到花生壳或者nat123(两个应用都不是免费的,其中花生壳可以8元认证,以后免费使用,nat123按天收费) 花生壳 ht ...

  9. 初步了解JPA

    想当初07.08年的时候,毕业之季,正思考着离开学校要去做什么工作.为了有一份薪资不错,可以长久发展,也正是自己喜欢的行业.于是乎决定投身于计算机行业.当年正是JAVA的火热时期.到处都是JAVA培训 ...

  10. 关于.NET 的邮件发送类

    .NET 类库中已经有现成的封好的类库了,只要引用System.Net.Mail命名空间即可实现发邮件的功能 以下是代码 public class SendMail { private string ...