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,这种方式并一定会起作用,但我提供的方法一定有效。