`
spacefly
  • 浏览: 277964 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2.0.11.2 的 validator 功能的 1个bug

    博客分类:
  • java
阅读更多

今天又用了一下struts2的validator功能,也就是校验功能,使用的是 xxx-validation.xml 配置文件的方式,结果出了比较奇怪的问题,后来才发现是web容器的问题,有些web容器 不能够支持这个功能,可能是由于xml文件加载的问题;

 

struts2.0.11 版本在resin3.0.25 上就不能支持该功能;

我放到 tomcat6 上就可以;

 

在 resin 上测错误提示是:

500 Servlet Exception

java.lang.NoClassDefFoundError: Could not initialize class com.opensymphony.xwork2.validator.ValidatorFactory
	at com.opensymphony.xwork2.validator.ValidatorFileParser.addValidatorConfigs(ValidatorFileParser.java:192)
	at com.opensymphony.xwork2.validator.ValidatorFileParser.parseActionValidatorConfigs(ValidatorFileParser.java:72)
	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.loadFile(AnnotationActionValidatorManager.java:361)
	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.buildAliasValidatorConfigs(AnnotationActionValidatorManager.java:244)
	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.buildValidatorConfigs(AnnotationActionValidatorManager.java:343)
	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.getValidators(AnnotationActionValidatorManager.java:69)
	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:138)
	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:113)
	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:100)
	at com.opensymphony.xwork2.validator.ValidationInterceptor.doBeforeInvocation(ValidationInterceptor.java:142)
	at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:148)
	at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:186)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:121)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504)
	at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
	at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:359)
	at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
	at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:109)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:271)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.concurrent.ConcurrentSessionFilter.doFilterHttp(ConcurrentSessionFilter.java:99)
	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
	at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
	at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
	at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:173)
	at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
	at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:274)
	at com.caucho.server.port.TcpConnection.run(TcpConnection.java:514)
	at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:520)
	at com.caucho.util.ThreadPool.run(ThreadPool.java:442)
	at java.lang.Thread.run(Thread.java:619)

Resin-3.0.25 (built Wed, 05 Dec 2007 08:19:34 PST) 

大概半年前,我在resin上用过struts2的validator功能,是没有问题的。

 

实在不想用tomcat,太慢了,因此大量的查资料和试验,最后终于解决了。

这个应该是 xwork.2.0.5 从 xwork.2.0.4 升级来 时 带来的一个bug,我将struts2.0.11.2 中自带的 xwork2.0.5 替换成 xwork2.0.4 之后,就可以了;

 

 

最好的解决方法:

在2008年10月20日,struts2组织又发布了新的版本struts2.0.12,这个版本已经修复了struts2.0.11.2里面的validation的bug,而且修复了一些其它的bug!所以最好的解决方法是将你的lib升级到struts.2.0.12版本!!!

至此,上面的那个bug就已经不再存在了!!!在struts2.0.12版本中修复了!!!

 

struts2 的版本可能不断更新中,2.0.xx 系列也在更新,每当发布一个GA版本应该都比前一个好用,因此用最新的GA版本就行了;

不过 2.0.xx 和 2.1.xx 系列 在结构上有些差别,从 2.0.xx 到 2.1.xx 的升级可能要求代码有一些方面的变化,不过2.0.xx之间的升级应当是OK的;

 

希望struts2可以越来越强大,起码它是我用过的java集成最好的MVC框架!!!

 

 

 

分享到:
评论
2 楼 pobaby 2008-10-29  
x-work-2.1.0就可以了。
1 楼 june_t 2008-10-08  
google真强,今天下午发布的,现在一下子就搜索出来了。
我今天开始用resin,之前在tomcat上的东西移到resin下, 发现其它的基本上正常,就是这个validator出现差不多这样的情况,刚才更换了x-work,果然就行了,多谢啊!
另,我换了x-work-2.1.1试了下,发现也不行。

相关推荐

    struts-2.0.11.2包

    总之,Struts2.0.11.2是一个轻量化的发布包,尽管去除了部分非必需文件,但保留了开发一个完整Struts2应用所需的核心组件。它提供了强大的MVC架构,支持插件扩展,使得Web应用开发更加高效和灵活。开发者可以通过这...

    struts1.x validator框架验证入门例子

    Validator框架是Struts1.x的一个重要组成部分,主要用于处理客户端和服务器端的数据验证。在这个入门例子中,我们将深入理解Validator框架的基本概念、配置以及如何在实际项目中应用。 一、Validator框架简介 ...

    struts1.x和struts2.x区别

    Struts1.x的工作流程较为固定,每个Action的执行都遵循一个预定的流程,从请求到达、调用Action到返回结果,整个过程相对单一。而Struts2.x则为每个Action提供了一个独立的工作流程,可以针对不同的Action配置不同的...

    JsJava2.0最新Javascript类库下载

    5. **验证功能**:`jsjava-validator-2.0.js`提供了数据验证功能,有助于确保输入数据的正确性和一致性,对于表单验证和数据清洗尤其有用。 6. **动画效果**:`jsjava-animation-2.0.js`包含一系列动画效果和过渡...

    struts1.x使用common-validator验证框架

    Struts1.x是一个经典的Java Web开发框架,它极大地简化了MVC(模型-视图-控制器)模式的应用程序开发。而Common-Validator是Apache Commons项目的一部分,它为Struts1.x提供了一种强大的数据验证机制。这个框架允许...

    java Struts 1.x 框架 Web 开发

    Struts 1.x 是一个基于 Model-View-Controller (MVC) 设计模式的 Java Web 开发框架,由 Apache 软件基金会开发并维护。它在20世纪末到21世纪初广泛应用于企业级Web应用开发,因其强大的功能和良好的社区支持而受到...

    struts 2.3.4.1 最新英文版API

    概览 程序包 类 使用 树 已过时 索引 帮助 上一个 下一个 框架 无框架 所有类 ----------------------------------------------------------- Struts 2.3.4.1 API 程序包 程序包 说明 --------------------------...

    struts1.x apps 所有最新的Struts1.x项目应用

    本资源集合包含了所有最新的Struts1.x项目应用,为开发者提供了一个宝贵的参考资料库。 Struts1.x的核心组件包括: 1. **ActionServlet**:这是Struts框架的核心,作为Servlet拦截请求,根据配置文件(struts-...

    struts2.0

    Struts2.0是Java Web开发中非常重要的一个框架,它是Apache软件基金会的Jakarta项目下的产品...通过压缩包中的"stust2.0.jar"文件,开发者可以直接在项目中引入Struts2.0的核心功能,快速构建起一个完整的Web应用程序。

    搭建struts1.x的jar包

    Struts 1.x 是一个经典的Java Web开发框架,由Apache软件基金会开发,它极大地简化了MVC(模型-视图-控制器)架构的实现。如果你正在寻找如何搭建Struts 1.x的开发环境,以下是一些关键的知识点,以及这些指定的jar...

    Struts2.0框架技术详解

    拦截器是Struts2的核心功能之一,用于在Action执行前后进行拦截处理。 **10.1 记录拦截器和execute方法的执行时间** 通过自定义拦截器来记录Action执行的时间。 **示例代码**: ```java public class ...

    MyEclipse_9创建SSH2开发环境必须的独立包

    struts2-core-2.0.11.2jar struts2 2.0.11.2的核心库 hibernate 相关包-------------------------------------------------- antlr-2.7.6.jar 语法分析生成器 backport-util-concurrent-3.1.jar ehcache支持jar ...

    Struts1.x 中文帮助文档

    9. **Validator框架**:Struts1.x包含一个内置的验证框架,可以方便地验证用户输入,防止非法数据进入系统。 10. **Session和Request范围的对象管理**:Struts1.x提供了一种机制来管理请求和会话范围内的对象,避免...

    struts2.0所有jar包

    Struts2.0是Apache软件基金会的一个开源框架,主要用于构建基于Java的企业级Web应用程序。它在Struts1的基础上进行了重大改进,提供了更强大的功能和更好的灵活性。Struts2的核心是Model-View-Controller (MVC)架构...

    struts 2.0

    Struts 2.0 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,由Apache软件基金会开发并维护。它继承了Struts 1.x的优点,并结合了WebWork框架的功能,提供了一种更为强大且灵活的方式来构建动态、...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    本书介绍了ASP.NET 2.0中的每个新增特性和功能,以便读者把这些新技术应用于实践。.. 本书主要内容 ● 服务器控件的概念及其在ASP.NET开发中的主导作用 ● 使用新的Master页面特性创建模板化的ASP.NET页面 ● ...

    struts1.2.jar包

    Struts1.2.jar包是基于Java的Web应用程序开发中的一个关键组件,它属于Apache Struts框架的一个版本。Struts是一个开源的MVC(Model-View-Controller)框架,用于构建可维护、可扩展和高度结构化的Web应用程序。在...

    struts 2.0 验证框架

    Struts 2.0 是一个基于MVC设计模式的Java Web框架,它为开发者提供了强大的控制层解决方案。其中,验证框架是Struts 2的重要组成部分,用于确保输入数据的准确性和完整性,防止非法数据进入系统。现在我们来详细探讨...

    ssh整合时常用的jar包

    1.上传文件用的包:commons-fileupload-1.2.1.jar 2.输入输出包: commons-io-1.4.jar...12.struts2整合spring时用的包:struts2-spring-plugin-2.0.11.2.jar 13.spring整合hibernate时用的包:spring-hibernate3.jar

    struts2.0开发真正用倒的包,已经分类.rar

    8. **Validation框架**:Struts2包含一个强大的表单验证框架,允许开发者在Action类或单独的Validator文件中定义验证规则。 9. **Struts2插件体系**:Struts2具有丰富的插件库,如Struts2-Conventions插件简化...

Global site tag (gtag.js) - Google Analytics