Struts2的数据验证
来源:互联网 发布:手动榨汁机好用么 知乎 编辑:程序博客网 时间:2024/05/16 11:46
1.验证方式
数据验证有两种方式:
第一种:客户端验证
第二种:服务器端验证
2.1编程式验证
这种方式,要求action必须继承ActionSupport
在代码中编写验证规则
a.针对动作类中的所有方法进行验证
在动作类中覆盖public void validate(这是ActionSupport的方法)
那么我们如果检测到错误后要做什么处理了,一般是提示一个字段不能为空,等等。struts2也为我们提供了一个存放错误消息的map,键是属性名,value是错误消息.
@Overridepublic void validate() {// TODO Auto-generated method stubsuper.validate();if(StringUtils.isEmpty(user.getName())){addFieldError("name", "用户名不能为空");}}
addFieldError就是我们存放错误消息的map集合
之前,再写a的标题的时候,写到是对所有方法的验证,那我们现在再写一个请求到某个方法,看下验证会不会起作用。
public String findAll(){return SUCCESS;}
<action name="findAll" class="com.yu.web.action.HelloAction" method="findAll"></action>
<a href="${pageContext.request.contextPath}/findAll.action">查看所有用户名</a>
说明其对所有的方法都其作用了,这样就会有问题,在不需要验证的方法中,有被验证了.
b.解决上述问题
第一种:在其不需要验证的方法上加@SkipValidate
@SkipValidationpublic String findAll(){return SUCCESS;}
第二种:如果一个action有很多种方法,那么如果只有一个需要验证,那么对于不需要验证的方法要加很多的@SkipValidate,显然是不方便的,Struts2也提供了一种只表示这个方法验证的方式:validate+方法名(方法名首字母要大些)
public void validateSaveUser() {// TODO Auto-generated method stubsuper.validate();if(StringUtils.isEmpty(user.getName())){addFieldError("name", "用户名不能为空");}}
编程式验证有一定的缺点,就是硬编码,所有的验证都要写代码来验证
2.2声明式验证(一般使用这种验证)
声明式验证是通过xml来解决的,需要验证时,就编写xml文件,不需要就不编写
a.针对所有的动作进行验证
编程规则:在动作类所在包中,建一个ActionClassName-validation.xml文件
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <!-- 先导入dtd约束 --> <validators> <!-- 要验证的字段 --> <field name="name"> <!--指定验证器验证什么 --> <field-validator type="requiredstring"> <!--有误显示的结果 --> <message>请输入用户名</message> </field-validator> </field> </validators>
b.针对动作类中某个动作进行验证
编程规则:在动作类所在的包中,建一个名称为ActionClassName-ActionName.xml文件
2.3struts2常用的声明式验证器
2.3.1位置
xwork-core-2.3.15.3.jar\com\opensymphony\xwork2\validator\validator\default.xml
2.3.2验证器注入参数
对于设置的一些验证,想做一些改变,比如前面的requiredstring是去空格的,我们想不去空格,就可以给它注入一个参数
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <!-- 先导入dtd约束 --> <validators> <!-- 要验证的字段 --> <field name="name"> <!--指定验证器验证什么 --> <field-validator type="requiredstring"> <!--依赖注入的方式设置其参数 --> <param name="trim">false</param> <!--有误显示的结果 --> <message>请输入用户名</message> </field-validator> </field> </validators>
第二种编写其声明式验证的方法,验证写在外面,字段写里面
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <!-- 先导入dtd约束 --> <validators> <!--指定验证器验证什么 --> <validator type="requiredstring"> <!-- 要验证的字段 --> <param name="fieldname">name</param> <!--依赖注入的方式设置其参数 --> <param name="trim">false</param> <!--有误显示的结果 --> <message>请输入用户名</message> </validator> </validators>
3 国际化
3.1struts2使用国际化的条件
首先,我们要知道,在Struts2中,所有的消息提示都是基于国际化的。
其次,要想在Struts2中使用国际化,动作类必须继承ActionSupport类。
a.配置全局资源包,所有包都可以使用
在struts2中配置
<constant name="struts.custom.i18n.resources" value="com.yu.web.resources.message"></constant>
b.配置包范围的资源
配置名称的规范:
package_语言代码_国家代码.properties(固定的),只为这个资源包中的内容或者其子包服务
c.局部消息资源包(只为动作类)
资源包名称命名规范:动作类名称_语言代码_国家代码.properties,以此种命名方式的资源包,只为动作类服务。
d.struts2中的资源搜素顺序
局部资源消息包——>包范围资源消息包——>全局资源消息包
2.读取资源包中的内容
a.在动作类中读取
struts2提供了一个textprovider来读取资源文件,所以我们只需继承ActionSupport(继承了textprovider)
public String findAll(){ //查找key值 String str=getText("country");System.out.println(str);return SUCCESS;}如果没有找到此key,那么就显示key值
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@taglib uri="/struts-tags" prefix="s"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> </head> <body> <!--借助struts标签 --> <s:text name="country"></s:text>用户列表 </body></html>
显示结果:
如果没有经过action,那么显示就是全局资源包的内容,否则,按顺序搜索显示内容
b.指定读取的资源包
<!--设定国际化的文件名 --> <s:i18n name="com\yu\web\action\package_zh_CN"> <s:text name="country"></s:text> </s:i18n>
资源包不存在,按搜索顺序搜素
- Struts2的数据验证
- Struts2 简单的数据验证
- Struts2的表单数据验证
- 【Struts2】使用Struts2的数据验证功能
- Struts2对表单提交数据的验证
- Struts2的数据验证框架validation framework
- struts2简单数据验证
- struts2之数据验证
- struts2简单数据验证
- Struts2 简单数据验证
- struts2 简单数据验证
- Struts2表单数据验证
- Struts2数据验证机制
- struts2数据验证机制
- Struts2数据验证机制
- struts2 简单数据验证
- struts2表单数据验证
- Struts2-数据验证
- 计算一个二叉树的深度
- 小谈Socket通讯
- angular路由的深入理解
- [NEFU119] 组合素数
- c++ 二分查找的函数 lower_bound & upper_bound & binary_search
- Struts2的数据验证
- 生成随机字符串的工具类
- php设计模式之二__单例模式
- Winform自定义控件事件
- Android RecyclerView 详解(2)---网格布局(支持多种分割线)
- 关于在页面加载完后使用js修改图片高度进行手机屏幕适配的问题
- 玲珑杯 1074 - Pick Up Coins(区间DP)
- Android错误之android.os.NetworkOnMainThreadException
- AndroidStudio 引入so包的两种方式