l          当类型转换成功以后,struts2将进行输入验证

若要进行输入验证则你的action必须继承ActionSupport类,实现其validate方法

在方法中调用addFiledError方法为验证失败的字段加上错误信息

注意若是一旦有验证失败的信息,struts会自动转入配置文件input中,若没有则出错!

若类型转换时就出错,也会转回input指定的页面并产生一条信息也加入到FiledError中,

在input指定页面中可以用struts标签<s:fielderror></s:fielderror>读出所有转换失败的信息与验证失败的信息

<s:fielderror>
        <s:param>field1</s:param>指定显示field1字段的信息
   </s:fielderror>

l          类型转换失败后struts2会自动产生转换失败的信息,一般这种信息并不是想看到得,可以通过配置及及资源文件来替换掉其内置信息

方法:在struts.xml中加入以下语句:

<constant value="message"></constant>

其中name不能变(可以在struts的jar包里面的default.properties找到),表示国际化资源文件的前缀名如中文资源文件为:message_zh.properties

英文为:message_en.properties 若为默认的则为:message.properties 其中资源文件要放在classes文件下面,如在message.properties下面加上一句:xwork.default.invalid.fieldvalue={0} error

若中{0}为占位符,在发生转换错误时struts2会自动将此占位符替换成发生错误的字段名,这句话的key不能变(可以从xwork-message.properties中找到,注意每个单词都是小写),value可以自定义,这样的配置为全局配置,即所有的发生转换错误都会调用此默认的格式,一般很少这么使用,因为控制并不精确

局部转换错误替换信息的配置:在要转换的action的同一包下:名字为:actionName.properties 即名称与action名称相同。里面的内容为

invalid.fieldvalue.attributeName=xxxxx message

其中invalild.fieldvalue不能变,struts2会以此来判断是不是用来类型转换时的替换信息

attributeName为action中的属性名称

基中int类型转换时会有些问题,若abc转换为int 转换会失败,即产生转换失败信息,但是struts2会自动将此字段赋值为0,这些要注意

l          一个action里封装多个业务处理方法,即相当于struts1.x中的DispatcherAction 与MappingDispatcherAction一样,不过这个action 依然只继承ActionSupport.

在自定义且继承ActionSupport的Action中加入业务处理方法,在struts.xml中的相应配置中加入

<!--

使用struts2的action很简单,也只继承一个ActionSupport就可以了,完全可以实现struts1.x中的

Action ,MappingDispatcherAction,DispatcherAction要实现的功能。

添加一个method属性则请求此action时会调用对应名称的业务处理方法。

若不加,则有两种情况

1.执行默认的execute方法。(此时请求的的path为register.action)

2.执行指定的方法,这个指定要在请求时指定.(此时请求的path为register!callMethodName.action)

比较奇怪,不过好用。

-->

<action name="register" class="edu.yzu.action.UserAction" method="register">

<!-- result 的name属性可以不写,不写的话表示为success -->

<result>/result.jsp</result>

<result name="input">/index.jsp</result>

<result name="login">/login.jsp</result>

<!--

为这个action指定拦截器,若不指定则会使用此包的默认拦截器

若指定一个拦截器,则此包的默认拦截器则不会被用于拦截此action

所以若还要使用默认拦截器时必须显示指出,如下:

-->

<interceptor-ref name="thirdinterceptor"></interceptor-ref>

<interceptor-ref name="mystack"></interceptor-ref>

<interceptor-ref name="thirdinterceptor"></interceptor-ref>

<interceptor-ref name="thirdinterceptor"></interceptor-ref>

</action>

这里要注意对于同一个自定义的action 中所有的业务处理方法在执行前一定会执行 validate方法,这显然有时并不合理。Struts2对于不同的业务处理方法的验证采用默认规则,即validate+业务处理方法名.如register()的验证方法为validateRegister().但是依然会执行validate()方法。解决方法有两个。1.不重写validate方法 2.将validate方法名改为validateExecute().因为execute()方法为action的默认方法,即struts.xml文件中没有配置method属性时会自动调用此方法。将validate改为validateExecute()后则此验证方法只验证execute()

Struts2的校验框架

l          Struts2的校验框架是针对一个action进行的(即一个action类一个校验文件,文件名也有一点的规则:actionName-validation.xml),用xml文件进行配置,这点有些类似于struts1.x

Xml文件的结构为

它的服务器端校验分为两种方式,一种是基于字段的,一种是基于验证器的,事实上两种方法是一回事,只是看问题的方面不同而已

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE validators SYSTEM "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" >

<validators>

<!-- 基于字段的方式

filed 的name属性为要验证action的属性

field-validator 的type属性为用哪种校验器来校验,这个值可以从

com.opensymphony.xwork2.validator.validators包下面的default.xml 中找到

short-circuit是指定当本验证器验证失败后后面的验证器是否还继续验证。蛮有用

其中param 的name属性为对应校验器的java类的属性

message为校验失败后添加到fielderror中的信息。

-->

<field name="userName" >

<field-validator type="requiredstring" short-circuit="true">

<param name="trim">true</param>

<message>userName shoud not blank!</message>

</field-validator>

<field-validator type="stringlength">

<param name="minLength">6</param>

<param name="maxLength">10</param>

<message>userName shoud be between ${minLength} and ${maxLength}!</message>

</field-validator>

</field>

<!--

基于校验器的方式

其中每个校验器的最一个param 的name的值都为fieldName固定不变,

表示校验action中的哪个属性

以后的param 的name与基于字段的校验的含义一样

可以看出基于校验器的验证并不如基于字段的验证看来直接(两者可以混合使用)

-->

<validator type="requiredstring">

<param name="fieldName">userName</param>

<message>userName shoud not be blank!</message>

</validator>

<validator type="stringlength">

<param name="fieldName">userName</param>

<param name="minLength">6</param>

<param name="maxLength">10</param>

<message>userName shoud be between ${minLength} and ${maxLength}!</message>

</validator>

</validators>

要注意的是同样一个自定义的action中有几个业务处理方法时也可以对每个业务处理方法进行校验。校验文件与此action放在同一个包下,并且名字为:actionName-methodName-validation.xml

需要注意的是如果也为此action 也配置了actionName-validation.xml文件,则此文件也会被使用于校验,应该尽量避免这种情况:方法与上面上同,将actionName-validation.xml改为actionName-execute-validation.xml 使此文件专用于默认的execute业务方法的校验。(事实上这种情况似乎遇到的并不多)

Struts2提供的客户端校验最好不要使用,有很大缺陷!

转载于:https://www.cnblogs.com/jinkun/archive/2010/05/03/1726459.html

3.Struts2的输入验证相关推荐

  1. Struts2的输入验证(三)-短路验证与非字段验证

    一.短路验证 若对一个字段使用多个验证器,默认情况下会执行所有的验证.若希望前面的验证器验证没有通过,后面的就不再验证,可以使用短路验证. 1)对同一个字段内的多个验证器,如果一个短路验证器验证失败, ...

  2. Struts2用户输入验证(6)

    10.6 小结 Struts2框架下的用户输入验证分为三种方式:1. 编程方式下的验证 2. 配置方式下的验证 3.注解方式下的验证.          如果在Struts2项目下存在多种验证方式,其 ...

  3. struts2系列(二):struts2参数传递错误、struts2的输入错误验证

    一.struts2参数传递错误 1. 基本数据类型的传递最好使用包装类,原因是struts 2.1之后使用基本数据类型如果参数为空会报错 2. 日期参数的传递最好定义一个区域的属性(定义locale) ...

  4. Struts2表单验证

    一.struts2.0的输入验证: A.手动验证: 1)重写validate() 2)重写validateXxx() B.使用验证框架 Action类都要继承ActionSupport类 二.为一个A ...

  5. jquery中输入验证中一个不错的效果

    在表单的输入验证中,经常要当用户没能正确输入后,要提示"XXXX输入错误" 这一类的信息,如何能搞到动态一点呢,今天发现jquery中的一个不错的效果,笔记之. 1 包含jquer ...

  6. C# 文本输入限制类型,datagridview单元格输入验证

    1.只能输入double类型 private void textBoxX6_KeyPress(object sender, KeyPressEventArgs e){{//数字0~9所对应的keych ...

  7. struts2 表单验证

    表单验证有两种方式,代码验证和xml配置验证器验证.每种方法都可以设置全局验证和单个方法验证.感觉单个方法用的多一点. 例子:用户注册,进行验证.表单如下 <!--设置错误显示格式--> ...

  8. C++为什么空格无法输出_C 语言 第8章-字符输入/输出和输入验证

    1. 缓存区 #include 大部分系统在用户按下 Enter 键之前不会重复打印刚输入的字符,这种输入叫缓冲输入.用户输入的字符被收集并存储在缓冲区(buffer). 把若干字符作为一个块进行传输 ...

  9. Samba nsswitch/pam_winbind.c文件输入验证漏洞

    漏洞名称: Samba nsswitch/pam_winbind.c文件输入验证漏洞 CNNVD编号: CNNVD-201312-047 发布时间: 2013-12-05 更新时间: 2013-12- ...

最新文章

  1. vsftpd.conf详解
  2. 公安网安装mysql 5.7_安装Mysql 5.7.1
  3. 【opencv】16.截取图像中的一个roi区域时,判断该roi是否越界
  4. Spring4学习笔记
  5. vs联合torch,ZED相机api,opencv建立C++项目
  6. concat特征融合_MSFNet:多重空间融合网络进行实时语义分割(北航和旷视联合提出)...
  7. excel图表交互联动_深入讲解EasyShu图表与引用数据动态联动功能
  8. blade php代码,Laravel 5框架学习之Blade 简介
  9. [P4063][JXOI2017]数列(DP)
  10. A 洛谷 P3601 签到题 [欧拉函数 质因子分解]
  11. python 分类变量xgboost_XGBoost的介绍、应用、调参、知识点
  12. C#调用WPS2016方法和常见问题处理
  13. 东南大学计算机技术935专业考研经验分享
  14. HTML中设置td的字体颜色
  15. 计算机基本键盘应用,计算机键盘基础知识
  16. 刷脸支付服务商市场空白大有可为
  17. 1.国民技术N32G45X例程之-串口打印
  18. 全国大学生软件测试大赛Web应用测试(二)Selenium功能测试环境配置
  19. 第7.5节 揭开Python类中self的面纱
  20. ht城市介绍人口数量Html,人口规模

热门文章

  1. Idea使用Lombok简化实体类代码
  2. 网络协议必会知识点:互联网网络分层
  3. python-判断语句介绍
  4. js代码实现购物车效果
  5. 思科——RIP的运用
  6. 文件操作之按照字符读写文件
  7. dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3(十)之Spring MVC中使用 Swagger2 构建Restful API...
  8. RESTheart官方文档
  9. grunt live reload 配置记录
  10. 全flash站制作剖析