您的位置:首页 > 编程语言 > Java开发

struts2使用 displaytag 分页异常的处理

2012-02-20 15:52 381 查看
displaytag翻页 异常ognl.InappropriateExpressionException: Inappropriate OGNL expression: (d - 443618) - p

 

异常的原因是因为在翻页时传递的参数名不规范,使用了减号

(如:http://localhost:8080/HRMS2.0/getDepartments.action?d-443618-p=1)

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

    private String acceptedParamNames = "[[//p{Graph}//s]&&[^,#:=]]*";

    private Pattern acceptedPattern = Pattern.compile(acceptedParamNames);

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

解决方法一:

 

<package name="default" extends="struts-default">

  <interceptors>

          <interceptor-stack name="defaultStack"><!-- 配置一个拦截器-->

              <interceptor-ref name="staticParams" />

              <interceptor-ref name="params">

                  <param name="excludeParams">dojo..*,d-..*</param><!-- 支持建号变量名 -->

              </interceptor-ref>

           </interceptor-stack>  

     </interceptors>

  <default-interceptor-ref name="defaultStack"/>

  <action name="sysProcess" class="org.zzzy.erp.web.action.SysAction" method="{1}">

   <result name="success">/${target}.jsp</result>

   <result name="list" type="redirectAction">sysUser_toList</result>

  </action>

</package>

--------------------------------------------------------------------------------------------------------------------------------------------

方法二

在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,这种方式并一定会起作用,但我提供的方法一定有效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息