`
阅读更多

三、自定义校验逻辑

毕竟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官网上找一下相关文档。
分享到:
评论

相关推荐

    Struts1的validator验证框架

    ### Struts1的Validator验证框架详解 ...然而,随着技术的发展,现代Web应用可能更倾向于使用Spring MVC、AngularJS等新兴框架,但Struts1的Validator框架依然有其不可替代的价值,特别是在遗留系统维护和优化方面。

    Struts2 校验器

    5. **校验结果处理**:当验证失败时,Struts2会将错误信息添加到ActionContext中,然后可以通过OGNL表达式在JSP页面中展示。同时,Action的execute方法不会执行,直到所有验证都通过。 6. **拦截器(Interceptor)*...

    Struts2输入校验总结

    反之,如果校验失败,会转向`input`视图资源,通常是在Struts2配置文件中指定的,用于显示错误信息给用户。 #### 三、基于验证框架的输入校验 除了手动校验,Struts2还提供了一个强大的验证框架,支持更复杂的校验...

    Struts的Validator-rules详解

    总的来说,Struts的Validator-rules是实现数据验证的重要工具,它通过XML配置简化了验证规则的声明,提高了代码的可维护性。理解并熟练运用Validator-rules能够有效地防止因用户输入错误导致的程序异常,提升应用的...

    struts用户注册登录用校验器校验信息

    在用户注册登录的场景中,Struts 提供了强大的验证功能,通过校验器(Validator)来确保用户输入的数据符合预设的规则,从而提高应用的安全性和用户体验。 在这个例子中,我们关注的是如何使用Struts的校验框架来...

    struts2输入校验深入总结

    开发者可以创建实现`Validator`接口的类,定义自己的校验逻辑,并在struts.xml中配置使用。 六、校验结果处理 当输入校验失败时,Struts2会将错误信息存储在`FieldErrors`对象中,可以通过`ActionContext`获取。...

    struts2 对action中的所有方法进行校验

    校验规则通常定义在XML配置文件或注解中,这样可以将业务逻辑与表现层分离,提高代码可维护性。 1. XML配置文件校验: 在struts.xml或类似的配置文件中,我们可以为每个Action定义一个对应的validate()方法。这个...

    struts2的数据校验

    当数据校验失败时,Struts2会将错误信息存储在ActionContext中,通常通过`FieldAware`接口将错误与特定的字段关联。开发者可以使用`ActionSupport`基类,该类已经实现了`FieldAware`接口,并提供了一些方便的方法,...

    struts2中的输入校验

    在Struts2中,输入校验是确保用户提交的数据符合预设规范的重要环节,可以防止非法数据进入系统,保护数据的完整性和安全性。本文将详细探讨Struts2中的输入校验机制。 首先,Struts2提供了两种主要的校验方式:...

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

    在"struts2_1.7_validator"这个压缩包中,可能包含了实现Struts2用户登录验证的示例代码。 Struts2的Validator框架是基于Apache Commons BeanUtils和Apache Commons DBCP的,它可以自动将表单字段映射到Action类的...

    Struts2自定义校验框架

    - XML配置:在`struts.xml`或相应的Action配置文件中,使用`&lt;validators&gt;`标签定义自定义校验器,通过`&lt;field-validator&gt;`指定需要应用该校验器的字段。 - 注解配置:在Action类的属性上使用自定义注解,通过注解...

    struts2输入校验

    这需要实现`Validator`接口并配置在`struts.xml`中。 5. **结果处理**: 校验失败后,Struts2会根据配置的`action`标签中的`input`属性值重定向到相应的视图,显示错误消息。错误消息可以通过`ActionContext`获取...

    struts2笔记之校验表单信息

    客户端校验是通过在JSP页面中的`&lt;s:form validate="true"&gt;`标签实现的,这会触发Struts2的JavaScript校验,使得用户在提交前就能得到反馈,提高了用户体验。 总结来说,Struts2的表单校验机制提供了多种灵活的方式...

    struts1.3实现的Validator简单验证

    在这个简单的验证例子中,我们将探讨如何利用Struts1.3的Validator来实现对用户输入的有效性检查。 Validator的核心功能是提供了一种机制,允许开发者在服务器端对用户提交的数据进行校验,确保数据的正确性和安全...

    Struts 1.1 Validator 校验实例

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

    Struts2校验框架应用

    本文将深入探讨Struts2校验框架的应用,包括其核心概念、配置方式、以及如何在实际项目中实现数据验证。 **1. Struts2校验框架基础** Struts2的校验框架是基于Apache Commons Validator库的,它允许开发者定义校验...

    Struts使用validation框架来实现校验,4种以上的校验规则

    在实现这些规则时,首先需要在ActionForm类中定义字段,并添加对应的校验注解。然后,创建一个对应的ValidatorForm子类,覆盖`validate`方法。在`struts-config.xml`中,配置该ActionForm并关联校验规则。最后,当...

    struts2 简单数据校验

    - 在Action类中,定义需要校验的字段,并添加`@Validated`注解或者使用Struts2的XML配置文件来指定需要校验的属性。 - 创建一个ValidatorForm或者继承ActionSupport的Action类,这些类包含了内置的校验逻辑。 - ...

    Struts的Validator验证框架使用教程

    它提供了强大的、可扩展的验证规则,使得开发者可以方便地在应用程序中实施数据校验,从而保证了数据的准确性和安全性。这篇教程将带你深入了解如何使用Struts的Validator框架。 一、Struts Validator框架概述 ...

    struts2输入校验总结

    总结,Struts2的输入校验机制提供了手动和自动两种方式,结合配置文件和内置校验器,能够实现灵活且强大的数据校验,有效地防止了非法数据的流入,提升了系统的安全性。在实际开发中,开发者可以根据业务需求选择...

Global site tag (gtag.js) - Google Analytics