第二天(1)声明式验证之使用验证框架验证域模型和ModelDriven验证
有一类特殊的属性,即这个属性的类型是另外一个JavaBean,如有一个User类,代码如下:
package data;
public class User
{
private String name;
private int age;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
}
在NewValidateAction类中加一个user属性,代码如下:
package action;
import com.opensymphony.xwork2.ActionSupport;
import data.User;
public class NewValidateAction extends ActionSupport
{
private String msg;
private int age;
private User user;
public String getMsg()
{
return msg;
}
public void setMsg(String msg)
{
this.msg = msg;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public User getUser()
{
return user;
} public void setUser(User user)
{
this.user = user;
}
}
如果要验证NewValidateAction中的user属性,可以使用visitor验证器。操作过程如下:
首先在NewValidateAction-validation.xml中加入一个<field>标签,代码如下:
<?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>
<message>User:</message>
</field-validator>
</field>
</validators>
其中context参数将作为验证User类属性的文件名的一部分,如user属性返回一个User对象,那么用于验证User对象属性的文件名为User-abc-validation.xml。这个文件要和User.class文件在同一个目录中。appendPrefix表示是否在字段里加user,如果为true,Struts2就会使用user.name在form提交的数据中查找要验证的数据。这个属性的默认值是true。如果出错,Struts2会将<message>标签中的信息加到User-abc-validation.xml文件中的相应错误信息前面。User-abc-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>
<field name="name">
<field-validator type="requiredstring">
<message>请输入name</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">5</param>
<param name="max">20</param>
<message>
必须在 5至20之间
</message>
</field-validator>
</field>
</validators>
下面修改validate_form.jsp,代码如下:
<s:form validate="true" action="new_validate" namespace="/test" >
<s:textfield name="msg" label="姓名" />
<s:textfield name="age" label="年龄"/>
<s:textfield name="user.name" label="姓名1" />
<s:textfield name="user.age" label="年龄1"/>
<s:submit/>
</s:form>
大家可以看到,最后两个<s:textfield>的name属性是user.name和user.age,正好是加了前缀的。现在重新访问 http://localhost:8080/validation/validate_form.jsp
经笔者测试,使用visitor无法以客户端验证的方式来验证user属性,但NewValidateAction中其他的属性可以使用客户端测试。
还有一种就是在ModelDriven动作中使用验证框架
和域模型相似,User-validation.xml没有变化,主要的变化在动作和JSP页面上。在动作方面,我们必须实现ModelDriven接口。
JSP变化:省略了OGNL表达式的用户级别,只保留顶级的引用,例如:username和password。
基于引用命名空间的改变,现在需要对visitor验证器的映射做一些轻微的改变。
<validators>
<field name="model">
<field-validator type="visitor">
<param name="appendPrefix">false</param>
<message>User:</message>
</field-validator>
</field>
</validators>
做了两处变更。首先,由于ModelDriven动作的域对象通过getModel()获取方法公开出来,所以现在我们需要改变指向model的字段名。其次,我们需要使用appendPrefix参数告诉visitor验证器不再需要在字段名之前增加user前缀。把这个参数设置为false允许验证器发现顶级字段名字。
第二天(1)声明式验证之使用验证框架验证域模型和ModelDriven验证的更多相关文章
- 9、 Struts2验证(声明式验证、自定义验证器)
1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...
- C#中手工进行声明式验证,从此远离if验证
今天在一个ASP.NET MVC Controller Action中写代码时,需要对ViewModel的字段进行验证.但这个Action处理的是手工编写的ajax请求(不是表单提交),无法使用ASP ...
- [原创]java WEB学习笔记70:Struts2 学习之路-- 输入验证,声明式验证,声明是验证原理
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- java struts2入门学习--基于xml文件的声明式验证
一.知识点总结 后台验证有两种实现方式: 1 手工验证顺序:validateXxx(针对Action中某个业务方法验证)--> validate(针对Action中所有的业务方法验证) 2 声明 ...
- JavaWeb应用中的身份验证(声明式)——基于表单的身份认证
容器管理安全最普遍的类型建立在基于表单的身份验证方式上. 通过这样的方式,server自己主动将尚未验证的用户重定向到一个HTML表单.检查他们的username和password,决定他们属于哪个角 ...
- 5. Bean Validation声明式验证四大级别:字段、属性、容器元素、类
1024,代码改变世界.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BAT的 ...
- spring security 一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中 配置的Bean,充分利用了Spring ...
- 【Kubernetes】深入解析声明式API
在Kubernetes中,一个API对象在Etcd里的完整资源路径,是由:Group(API组).Version(API版本)和Resource(API资源类型)三个部分组成的. 通过这样的结构,整个 ...
- k8s之Deployment 声明式地升级应用(五)
Deployment 声明式地升级应用 现在你已经知道如何将应用程序组件打包进容器,将他们分组到pod中,并为它们提供临时或者持久存储,将密钥或配置文件注入,并可以使pod之间互相通信.这就是微服务化 ...
随机推荐
- spring源码解析之IOC容器(二)------加载和注册
上一篇跟踪了IOC容器对配置文件的定位,现在我们继续跟踪代码,看看IOC容器是怎么加载和注册配置文件中的信息的.开始之前,首先我们先来了解一下IOC容器所使用的数据结构-------BeanDefin ...
- Linux进程的虚拟内存区域划分
Linux进程的虚拟内存区域分为:代码区.只读常量区.全局区.BSS段.堆区.栈区 代码区:存储功能代码,函数名所在的区域 只读常量区:存放字符串常量,以及const修饰的全局变量 全局区/数据区:存 ...
- 嵌入式开发之simulation--- 双目移动dsp机器人
http://foundy.blog.163.com/blog/static/263383442014112391130207/
- 编程算法 - 二叉树的最低公共祖先 代码(C)
二叉树的最低公共祖先 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 二叉树的最低公共祖先(lowest common ancestor), 首先先序遍 ...
- Shell 编程基础 --语法高速入门
简单的说shell就是一个包括若干行Shell或者Linux命令的文件.对于一次编写,多次使用的大量命令,就能够使用单独的文件保存下来,以便日后使用.通常shell脚本以.sh为后缀.第一行一定要指明 ...
- ASP.NET动态网站制作(19)-- C#(2)
前言:C#的第二次课,依旧讲解C#的基础知识. 内容: 1.GC:垃圾回收机制,可以回收托管模块中的垃圾. 2.值类型和引用类型: (1)值类型:所有的数值类型都是值类型,如int,byte,sho ...
- codevs 必做:2776、1222
2776 寻找代表元 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 广州二中苏元实验学校一共有n个社团,分 ...
- 【BZOJ3143】[Hnoi2013]游走 期望DP+高斯消元
[BZOJ3143][Hnoi2013]游走 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 ...
- (比赛)B - Super Mobile Charger
B - Super Mobile Charger Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- 九度OJ 1254:N皇后问题 (N皇后问题、递归、回溯)
时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:765 解决:218 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一 ...