`
huibin
  • 浏览: 750220 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

在Struts2中使用DisplayTag翻页时的ognl.InappropriateExpressionException解决方案

阅读更多

在struts2中使用displayTag组件进行翻页 时出会出下面的异常,异常的原因是因为在翻页时传递的参数名不规范,使用了减号(如:?d-443618-p)

http://localhost:8088/HBM_Student/getDepartments.action?d-443618-p=1

而这个参数在提交时,strust2中的 ParametersInterceptor拦截器会对提交的参数进行验证,验证时使用的是正则表达式,原代码如下:

    private String acceptedParamNames = "[[\\p{Graph}\\s]&&[^,#:=]]*";
    private Pattern acceptedPattern = Pattern.compile(acceptedParamNames);

   而定义的正则表达式中不支持减号(-),所以才出现下面异常。

解决方法:

在自己项目src中创建包,包名只能为:com.opensymphony.xwork2.interceptor

1. 创建类:ParametersInterceptor

2. 复制Struts2中的xwork-2.1.2.jar包中的 com.opensymphony.xwork2.interceptor.ParametersInterceptor文件内容,并粘贴到刚创建的类 中。

3. 找到正则表达式的代码,加入减号:

   private String acceptedParamNames = " - [[\\p{Graph}\\s]&&[^,#:=]]*";
    private Pattern acceptedPattern = Pattern.compile(acceptedParamNames);

至此,问题真正的解决。

这里说一下,网上有同志说把struts.devMode值设为false,这种方式并一定会起作用,但我提供的方法一定有效。

 

 

21:07:56,953 WARN OgnlValueStack:49 - Error setting value
ognl.InappropriateExpressionException: Inappropriate OGNL expression: (d - 443618) - p
at ognl.SimpleNode.setValueBody(SimpleNode.java:257)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
at ognl.SimpleNode.setValue(SimpleNode.java:246)
at ognl.Ognl.setValue(Ognl.java:476)
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:192)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:155)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:143)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:284)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:198)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:206)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:856)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509)
at java.lang.Thread.run(Thread.java:619)

分享到:
评论
5 楼 sutra 2011-07-20  
设置log级别为error,眼不见为净:
	<logger name="com.opensymphony.xwork2.ognl.OgnlValueStack">
		<level value="ERROR" />
	</logger>

4 楼 huibin 2011-02-15  
zhouzhichu 写道
我用了也不行,楼主再试试吧

可能你那里的配置有问题 ,再检查检查了,我就是按上面一步一步,问题解决了
3 楼 zhouzhichu 2010-05-25  
我用了也不行,楼主再试试吧
2 楼 qq363445821 2010-05-18  
你这方法不管用,我用了之后,搞得我的页面传值都不行了,直接报空指针。
1 楼 wudiju 2010-05-11  
翻译的不错。。。

相关推荐

    Struts2中使用displaytag标签总结

    这篇博客文章《Struts2中使用displaytag标签总结》很可能是讨论如何在Struts2框架下集成并利用DisplayTag库来高效地处理表格显示。 DisplayTag标签库包括一系列自定义JSP标签,这些标签能够帮助开发者快速创建美观...

    Struts2+displaytag+dbutil

    具体到压缩包的文件列表,"displaytag"可能是DisplayTag库的相关文件,包括JAR包和其他资源,这些文件会被添加到项目的类路径中,以便在Web应用中使用DisplayTag的功能。开发者通常会在Struts2的Action类中编写...

    Struts中使用displaytag简单小教程

    在Struts项目中使用DisplayTag,首先需要将其依赖添加到项目的类路径中。这通常通过在`pom.xml`(如果是Maven项目)或`build.gradle`(Gradle项目)中添加DisplayTag的依赖实现。 3. **配置DisplayTag** 在Struts...

    displaytag-1.2.jar

    displaytag-1.2.jar 显示标签

    displayTag依赖jar包.rar

    commons-beanutils.jar, commons-collections3-3.2.1.jar commons-lang-2.1.jar displaytag-1.2.jar 还有一个demo代码包,里面有displayTag的例子,帮助你学习 希望能帮助你

    Struts2 DisplayTag 分页

    Struts2和DisplayTag是Java Web开发中两个重要的框架,它们在构建动态、交互式的Web应用时发挥着关键作用。DisplayTag是一个功能强大的开源库,主要用于生成表格和提供分页功能,而Struts2则是一个MVC框架,用于处理...

    DisplayTag分页资料整理.chm

    个人学习收集网上资料辛苦整理而成. DisplayTag分页资料整理.chm DisplayTag 分页 chm java taglib

    Struct.Hibernate.DisplayTag标签.js.Div.css.第4讲(zk原创).rar

    标题中的“Struct.Hibernate.DisplayTag标签.js.Div.css.第4讲(zk原创).rar”表明这是一个关于Struct、Hibernate、DisplayTag、JavaScript(js)、CSS(Div/CSS)技术的第四部分讲解,由“zk原创”制作并压缩为RAR...

    displaytag-jar.rar_Displaytag.jar_displaytag_displaytag 1.2 jar_

    在使用"Displaytag.jar"时,开发者通常会将其复制到项目的`WEB-INF/lib`目录下,这样Web应用服务器在运行时就能找到并加载这个库。除此之外,可能还需要其他依赖的jar包,例如与数据库操作相关的驱动,这取决于具体...

    displayTag使用总结.doc

    这将允许你在JSP页面中使用`display:`前缀的标签。 2. **配置DisplayTag**: - 首先,需要将DisplayTag相关的JAR文件(如displaytag-x.x.x.jar)以及样式表(如displaytag.css)放入你的Web应用的WEB-INF/lib目录...

    displaytag-1.1.jar

    displaytag-1.1.jar,显示表格的tag

    Struts2结合DisplayTag框架进行分页案例

    Struts2和DisplayTag是Java Web开发中两个重要的开源框架,它们在构建动态网页和数据展示方面发挥着关键作用。Struts2是一个基于MVC(Model-View-Controller)模式的框架,它提供了强大的控制层功能,使得开发者可以...

    displaytag-1.2-src.zip

    10. **社区支持**:作为开源项目,DisplayTag 拥有一个活跃的开发者社区,提供文档、示例和问题解答,帮助用户解决使用过程中遇到的问题。 了解DisplayTag 1.2的源代码,开发者可以深入研究其背后的实现逻辑,优化...

    displaytag-1.1.jar和display-export-poi-1.1.jar下载

    DisplayTag是Java Web开发中的一款开源表格标签库,它为开发者提供了一种高效且易于使用的表格展示解决方案。DisplayTag-1.1.jar是这个库的主要组件,包含了处理表格展示的各种功能,如排序、分页、格式化数据以及...

    displaytag-1.1.1-bin.zip_displaytag_displaytag-1.1.1-src_display

    在部署和使用Displaytag时,你需要将`displaytag-1.1.1.jar`添加到项目的类路径中,然后在JSP页面上使用DisplayTag提供的标签,例如`&lt;display:table&gt;`,配合其他属性设置,如`export`, `sort`, `pagesize`等。...

    displaytag1.2.jar 下载

    displaytag1.2.jar 下载

    displaytag-1.1.rar_displaytag

    6. **集成**:DisplayTag很容易与其他框架集成,如Struts、Spring MVC等,提供了一致的视图层解决方案。 7. **文档和社区**:DisplayTag项目有详细的文档和活跃的社区支持,开发者可以在这里找到解决方案和最佳实践...

    [浪曦][原创][A337]Struts+Hibernate+DisplayTag标签+js+Div+css 第2讲(zk原创).rar

    在[A337]Struct+Hibernate+DisplayTag标签+js+Div+css 第2讲.exe这个文件中,你将获得实际操作的步骤和代码示例,通过实践来加深对这些技术的理解。这不仅有助于提升你的编程技能,还能让你掌握如何将多种技术融合,...

    07java培训displaytag分页实例六.doc

    07java培训displaytag分页实例六

    displaytag-DEMO.zip_DEMO_displaytag de_displaytag demo_displayta

    下面我们将深入探讨DisplayTag的核心特性、如何使用以及它在实际开发中的应用。 1. **DisplayTag概述** DisplayTag是一个基于JSP标签库的组件,它的主要目标是提供一个易用且强大的表格显示解决方案。它不仅支持...

Global site tag (gtag.js) - Google Analytics