`
阅读更多

三、自定义校验逻辑

毕竟Struts提供的校验逻辑有限,不可能满足所有的开发需要,因此有时必须对其进行扩展。这里举一个实际项目中的例子:校验码检查。现在很多网站为了防止恶意的页面刷新攻击,都使用了图片形式的校验码,如:

表单提交后需要检查校验码(存在request或session里)和用户输入是否一致,代码如下:

 1public class MyValidator{
 2  private static Logger logger = Logger.getLogger(Constants.CON_LOGGER_NAME);
 3
 4  public static boolean validateCodeInput(Object obj,ValidatorAction action,Field field,
 5      ActionMessages errors,HttpServletRequest req){
 6    String code = (String)req.getSession().getAttribute(Constants.SESSION_CHECKSUM_CODE);
 7    String input = ValidatorUtils.getValueAsString(obj,field.getProperty());
 8
 9    logger.debug("Code: " + code + ", input: " + input);
10    if(code.equalsIgnoreCase(input))
11      return true;
12    else{
13      errors.add(field.getKey(),Resources.getActionMessage(req,action,field));
14      return false;
15    }

16  }

17}

注释:
1、第1行:MyValidator没有任何父类,运行时Validator通过reflection生成对象
2、第4行:校验方法可随意命名,通过reflection调用,但参数必须按照规范
3、第6行:从session中取出图片中的字符串
4、第7行:得到用户输入的值,Struts在这里用Field类对表单字段进行了封装,而Field具体封装的字段在validation.xml中定义,见上篇

validator-rules.xml中的定义:

 1<validator name="codeinput"
 2            classname="consultII.web.utils.MyValidator"
 3               method="validateCodeInput"
 4         methodParams="java.lang.Object,
 5                       org.apache.commons.validator.ValidatorAction,
 6                       org.apache.commons.validator.Field,
 7                       org.apache.struts.action.ActionMessages,
 8                       javax.servlet.http.HttpServletRequest"
 9                  msg="errors.code"/>
10

validation.xml中的定义:

<field property="input" depends="required,codeinput"/>

<field property="input" depends="required,codeinput"/>

在servlet中将校验码存入session传递给Validator:

req.getSession().setAttribute(Constants.SESSION_CHECKSUM_CODE,code);

这样就OK了。

四、将校验逻辑转译成JavaScript代码

由于Validator的代码在服务器端被执行,因此如果校验请求频繁的话将会对服务器端造成不小的性能压力。考虑到这个问题,Struts中提供的校验方法可以被转译成JavaScript代码嵌入页面,这样校验将在客户端进行。
使用时,只要在页面中嵌入两条Struts html标签库中的标签:

1<html:javascript formName = "formName" />
2<html:form action = "" onsubmit = "return validateFormName(this);" />

其中第一行定义了需要转译的FormBean名,这里是“formName”,第二行在该FormBean封装的表单上添加onsubmuit事件,而该事件调用的函数会在JSP请求到客户端时由Validator框架自动生成,命名规则为“validateXXX”,其中“XXX”就是第一行中的formName属性的值,这里是“formName”,因此生成的函数名为“validateFormName”。
关于为自定义的Validator(如上文的MyValidator)创建JS代码,我没有实现过,感兴趣的话可以去Struts官网上找一下相关文档。
分享到:
评论

相关推荐

    Struts 1.1 Validator 校验实例

    Struts 1.1 Validator 校验实例 完全代码, 直接工程 导入 &lt;br&gt;参考 Struts in action 上面修改!!!

    struts2用户登录实例的validator后台校验

    通过用户登录的例子,用Struts2的validator做后台的校验

    Struts 2校验框架的应用

    ... (3):年龄的校验规则是必须是整数,且在1到120之间。 (4):生日的校验规则是必须在1950-1-1到1990-...(5):所有提示信息均要用到国际化资源文件实现。 (6):注册成功返回success.jsp页面,显示所有注册信息。

    Struts1.3 Validator 验证框架校验Email 例子

    Struts1.3 与1.2向比验证框架部分还是有所区别的,该例子通过一个简单的Email的校验,演示如何通过Struts Validate验证框架进行在页面中生成JavaScripte脚本,进行客户端校验。下完后记得评分,资源分就会回来,还能...

    Struts Validator验证器使用指南.pdf

    Struts Validator验证器使用指南中详细描述了校验器的使用

    Struts的全局异常控制和common-validator校验框架

    Struts的全局异常控制和common-validator校验框架.doc

    自定义校验注解框架(validator)

    自定义注解参数校验框架,根据项目开发中参数校验情况手写一套框架,供大家学习参考使用。可以直接运用在项目中,如果漏洞请留言,小编会第一时间修复,如果好用请给个好评,谢谢。

    Struts2之Validator验证框架的详细介绍

    Struts2中提供了数据校验验证数据例如验证邮件、数字等,本篇文章介绍了Struts2之Validator的详细介绍,有兴趣的可以了解一下。

    实战STRUTS 电子书

    本书完整介绍了Struts框架结构,涵盖了设计、数据校验、数据库访问、动态页面生成、本地化、Struts配置以及其他一些重要的方面。书中还介绍了如何同时使用JSP标签和Velocity模板,并仔细介绍了Struts体系结构以及...

    struts2校验器_xml格式

    使用struts2验证form表单信息_xml格式

    网上购物系统struts+Oracle10.2

    struts做的一个网上购物系统的练习,包括了以下几个方面的内容: 1.struts国际化处理, ...4.Validator校验, 5.自定义异常处理, 6.JNDI+Oracle10.2数据库连接池的配置 7.iterate迭代器和JAVA泛型的用法

    动态验证框架validator

    介绍动态验证框架validator非常清楚,很值得参考,希望大家都来看看。

    Struts-Jar

    struts的验证框架依赖以下的两个包: commons-validator.jar (校验方法)和校验规则。

    java面试宝典

    128、在JSP中如何使用注释? 32 129、在JSP中如何执行浏览重定向? 32 130、如何防止在JSP或SERVLET中的输出不被BROWSER保存在CACHE中? 32 131、在JSP中如何设置COOKIE? 32 132、在JSP中如何删除一个COOKIE? 32 133、...

    Jfinal官网demo

    JFinal教程手册 JFinal特点 MVC 架构,设计精巧,使用简单 遵循 COC 原则,零配置,无 xml ...强大的 Validator 后端校验功能 功能齐全,拥有 struts2 绝大部分核心功能 体积小仅 303K,且无第三方依赖

    JFinal jar包

    JFinal开发所需的jar包MVC架构,设计精巧,使用简单 遵循COC原则,零配置,无xml 独创Db + Record模式,灵活便利 ...强大的Validator后端校验功能 功能齐全,拥有struts2的绝大部分功能 体积小仅248K,且无第三方依赖

    JFinal-手册-1.3

    JFinal有如下主要特点: MVC架构,设计精巧,使用简单 遵循COC原则,零配置,无xml 独创Db + Record模式,灵活便利...强大的Validator后端校验功能 功能齐全,拥有struts2的绝大部分功能 体积小仅218K,且无第三方依赖

    JAVA 极速WEB+ORM框架 JFinal

    JFinal有如下主要特点: MVC架构,设计精巧,使用简单 遵循COC原则,零配置,无xml 独创Db + Record模式,灵活便利 ...强大的Validator后端校验功能 功能齐全,拥有struts2的绝大部分功能 体积小仅538K

    千方百计笔试题大全

    128、在JSP中如何使用注释? 32 129、在JSP中如何执行浏览重定向? 32 130、如何防止在JSP或SERVLET中的输出不被BROWSER保存在CACHE中? 32 131、在JSP中如何设置COOKIE? 32 132、在JSP中如何删除一个COOKIE? 32 133、...

    Spring中文帮助文档

    5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP...

Global site tag (gtag.js) - Google Analytics