`
desert3
  • 浏览: 2159286 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Commons Validator 1.3与Struts 1.1混合使用时的问题处理

 
阅读更多
公司现有项目框架使用Struts1.1以及Validator1.3(没有权限动)
业务Form从DynaValidatorActionForm继承,重写
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {

方法时,调用super.validate方法或者使用Struts1.1的方法Resources.initValidator生成Validaor(打算生成后调用其validate方法)时,都报错误NoSuchMethodError:
java.lang.NoSuchMethodError: org.apache.commons.validator.Validator.addResource(Ljava/lang/String;Ljava/lang/Object;)V
org.apache.struts.validator.Resources.initValidator(Resources.java:316)



原因:Validator刚出来时,是作为Struts的一个组件的形式存在的,后来为了将其作为独立组件对外提供验证服务同时考虑资源国际化的功能,从Validator中移除了addResource方法,改为使用ValidatorResources,因此报如上错误。

如使用Struts1.1自己生成的Validator,那么会在Struts内部使用到addResource方法,进而导致上述错误,因此,要解决如上问题,只能自己生成需要的Validator

参考附件中的生成代码:
InputStream in = ValidateExample.class.getResourceAsStream("validator-example.xml");
ValidatorResources resources = new ValidatorResources(in);

        // Create a validator with the ValidateBean actions for the bean
        // we're interested in.
        Validator validator = new Validator(resources, "ValidateBean");
        
        // Tell the validator which bean to validate against.
        validator.setParameter(Validator.BEAN_PARAM, bean);
ValidatorResults results = validator.validate();


项目中使用时根据出现的问题做如下修改:
1,ValidatorResources不再重复读取,而是直接从Struts1.1下的Resources中取得(Struts1.1已经通过插件导入多个Validator rules和validation的配置文件)
ValidatorResources resources = Resources.getValidatorResources(application, request);
2,由于项目中使用了自定义的Validator方法validateMaxLength,Validator中默认的ClassLoader:StandardClassLoader[Tomcat的]加载不到,会报错误:ClassNotFound:自定义的验证类
解决:设置属性使用当前上下文的ClassLoader
// UseContextClassLoader Must to be set true so that own Validation class can by loaded 
            validator.setUseContextClassLoader(true);

3,由于上述的Validator是自己手动生成,并不是Struts1.1生成出来的,因此默认下,ActionErrors和HttpServletRequest都是null的,需要手动设置下:
            // Parameter for actual Validation method to use
            validator.setParameter("org.apache.struts.action.ActionErrors", errors);
            validator.setParameter("javax.servlet.http.HttpServletRequest", request);
分享到:
评论

相关推荐

    struts1.1 jar包

    在实际项目中,开发人员会将struts1.1的jar包与其他依赖库(如log4j、commons-logging等)一起添加到项目的类路径中,以便充分利用Struts框架提供的服务。开发流程通常包括编写Action类、ActionForm类、配置文件以及...

    Struts_1.1 JDBC驱动

    在Struts 1.1中,可以通过在web.xml和struts-config.xml中配置数据源,例如使用Apache Commons DBCP或C3P0等第三方库。 在处理数据库操作时,Struts 1.1应用可能会利用ActionForm来封装用户输入的数据,然后通过...

    commons-codec-1.3.jar,commons-httpclient-3.1.jar,commons-logging-1.1.jar)

    1. **commons-codec-1.3.jar**:这个JAR文件包含了Apache Commons Codec库的1.3版本。Codec库提供了多种编码和解码算法,包括Base64、Hex、URL编码和解码,以及各种电话号码的国际格式化。在图片上传场景中,它可能...

    commons-dbutils-1.3.zip

    DBUtils库是Apache Commons项目的一部分,旨在提供一个简单、安全的方式来处理数据库操作,减少与数据库交互时出现的常见错误。 DBUtils的核心理念是基于数据库连接池和对JDBC API的封装,以提高性能和易用性。在...

    commons-dbutils-1.1,commons-dbutils-1.3资源包

    3. **Bug修复**:1.3版本通常会修复1.1版本中已知的错误和问题,增强软件的稳定性。 4. **兼容性提升**:可能增加了对新版本JDBC驱动和其他相关技术的兼容性。 在使用这些资源包时,开发者需要先将其解压,然后将...

    commons validator

    5. **与Struts集成**:Apache Commons Validator 与Struts框架紧密集成,可以方便地在Struts应用程序中进行表单验证。然而,它也可以独立使用,与其他MVC框架或无框架的Java应用程序配合。 6. **邮件地址验证**:内...

    表单验证控件commons-validator-1.3.1

    表单验证控件commons-validator-1.3.1表单验证控件commons-validator-1.3.1表单验证控件commons-validator-1.3.1表单验证控件commons-validator-1.3.1表单验证控件commons-validator-1.3.1表单验证控件commons-...

    apache commons validator api zh

    apache commons validator api zh

    apach基于数据验证的工具包 commons-validator-1.3.1.jar

    总的来说,Apache Commons Validator 是一个强大的工具,它通过提供灵活的验证规则和易于扩展的架构,帮助开发者轻松地处理数据验证问题,确保应用程序的数据输入符合预期的格式和约束。通过深入研究源码,我们可以...

    commons-codec.jar;commons-logging-1.1.jar;commons-httpclient-3.1.jar

    commons-httpclient-3.1.jar"提及了三个关键的Java库文件,这些文件在Java开发中扮演着重要的角色,尤其是在处理网络通信和编码解码任务时。下面将详细阐述这三个库的功能和重要性。 1. **Apache Commons Codec** ...

    CommonsPool1.3API

    CommonsPool1.3API

    apache commons 常用jar包 commons-validator commons-transaction commons-lang等

    jar包大小:135KB commons-validator-1.3.1.jar jar包大小:93KB commons-transaction-1.2.jar jar包大小:141KB commons-scxml-0.6.jar jar包大小:254KB commons-primitives-1.0.jar jar包大小:60KB commons-pool-1.3....

    实战springmodules commons validator

    其中commons validator是一个可配置的验证框架,使用方式和工作原理都和struts用的ValidatorPlugIn一样。它可以通过配置生成js在客户端验证, 也可以配合具有验证功能的spring controller实现客户端验证. 本下载文件...

    commons-validator:Apache Commons Validator

    与Apache Commons Validator的使用有关的问题应张贴到。 在哪里可以获得最新版本? 您可以从我们的下载源代码和二进制文件。 或者,您可以从中央Maven存储库中提取它: < groupId>commons-validator ...

    commons-validator.doc 用法介绍

    使用Commons Validator首先需要在项目中引入相关的jar包,包括Struts 1.3.8的核心包以及commons-validator.jar。这些库包含了Validator框架的类和方法,使得你可以利用它们来实现验证功能。 **配置验证** 1. 创建`...

    commons-exec-1.3-API文档-中文版.zip

    赠送jar包:commons-exec-1.3.jar; 赠送原API文档:commons-exec-1.3-javadoc.jar; 赠送源代码:commons-exec-1.3-sources.jar; 赠送Maven依赖信息文件:commons-exec-1.3.pom; 包含翻译后的API文档:commons-...

    commons-email-1.1.jar

    通过使用Apache Commons Email,开发者可以避免直接与复杂的JavaMail API交互,使得代码更简洁、更易于理解。 其次,`mail.jar`是JavaMail API的核心库,它是Java发送邮件的基础。JavaMail API定义了一系列接口和类...

    struts2 的类库 commons-logging-1.1 源码

    在 Eclipse 这样的集成开发环境中,你可以通过配置这个源码位置来查看 Commons Logging 的内部工作原理,这有助于在调试时深入理解 Struts2 中的日志处理逻辑。 Commons Logging 的核心接口是 `org.apache.commons...

    commons-validator-1.3.1.zip

    在实际应用中, Commons Validator通常与其他Java EE框架如Struts、Spring等集成,用于Web表单验证,确保应用程序的数据一致性。此外,由于其良好的可扩展性和灵活性,它也被广泛应用于服务端数据处理、后台逻辑验证...

Global site tag (gtag.js) - Google Analytics