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,这种方式并一定会起作用,但我提供的方法一定有效。
异常的原因是因为在翻页时传递的参数名不规范,使用了减号
(如: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,这种方式并一定会起作用,但我提供的方法一定有效。
相关文章推荐
- struts2使用 displaytag 分页异常的处理
- Struts2使用Displaytag导出Excel,抛出nullException异常的处理
- 使用struts2 做客户端校验时抛出freemarker模版错误异常的处理
- struts2之使用JSON插件实现Ajax(处理hibernate的POJO类时出现的异常)
- struts2 与 spring 使用aop处理Action异常
- 商务综合管理-day2~5 分页实现,shiro(验证授权,MD5Hash加密),struts2全局异常处理
- struts2配置导致jsp使用标签库异常的处理
- APP开发实战152-Android使用UncaughtExceptionHandler处理异常
- JavaScript可以使用try...catch来进行异常处理
- Android中使用UncaughtExceptionHandler来处理未捕获的异常
- MVC使用HandleErrorAttribute处理异常
- struts2学习笔记--使用struts2插件实现ajax处理(返回json数据)
- SQL Server中使用异常处理调试存储过程
- 实例:Struts2结合DisplayTag、DbUtils实现查询分页、导出Excel
- Struts2文件上传,以及上传拦截异常国际化处理
- Struts2使用native2ascii命令处理国际化资源文件
- 牛客网Java刷题知识点之什么是异常、异常处理的原理是什么、为什么要使用异常、异常体系、运行时异常、普通异常、自定义异常、异常链
- BigDecimal使用以及异常处理
- Struts2中的异常处理
- 使用Spring MVC的@ControllerAdvice注解做Json的异常处理