- 在很多时候,struts2里面的类型转换器的错误信息实在是烦人。比如我们在xml验证器里将
- 页面age字段(int 型)的xml验证方法配置了,用户输入一个abc时,这时候会出现两条信息,一就是这个内置转换器的转换失败的错误信息,一串英文,虽然可以国际化一下,但是这条信息出来以后,age自已的xml验证器也要提示错误.比如你age 规定 10 - 100 之间的数字,但是你输入了abc,struts内置的转换器会提示转换失败,同时将值给个 0 ,这时候xml的验证又会失败。成了两个错误信息。
- 我发现有两种方法可以消除他的这个自带的转换失败信息:其实内型转换失败完全可以用xml验证器就够了。他里面也有验证类型的。所以struts2里面的那个就显得多余了.
- 第一种方法是找到xwork的包,里面的
- package com.opensymphony.xwork2这个目录下
- 有个xwork-message.properties文件,这个文件里面的内容如下
- xwork.error.action.execution=Error during Action invocation
- xwork.exception.missing-action=There is no Action mapped for action name { 0 }.
- xwork.exception.missing-package -action=There is no Action mapped for namespace { 0 } and action name { 1 }.
- xwork.default .invalid.fieldvalue=Invalid field value for field "{0}" .
- 可以清楚的看到最讨厌的那个Invalid field value for field "{ 0 }就在最后一行。我们可以删掉这行。然后把源文件重新编译成jar就行了.这样的话,就不会显示类型转换失败了。要验证用户输入的类型对不对的话,可以用xml自带的东西
- 第二种方法:
- 这种方法可以不修改源文件.
- 我们知道struts2有个叫拦截器的东西.其实这些类型转换啊什么的都是用这个东西现实的。知道这点就好办了。我们去把那个默认的拦截器stack改了就行了。
- 查看struts-default .xml里面,看到了默认截拦器 他使用了conversion这个东西。
- 把这行去掉就行了。做个我们自已的拦截器stack,然后加入到struts.xml文件中
- 这里就是struts-default .xml文件
- <interceptor-stack name="defaultStack" >
- <interceptor-ref name="exception" />
- <interceptor-ref name="alias" />
- <interceptor-ref name="servletConfig" />
- <interceptor-ref name="prepare" />
- <interceptor-ref name="i18n" />
- <interceptor-ref name="chain" />
- <interceptor-ref name="debugging" />
- <interceptor-ref name="profiling" />
- <interceptor-ref name="scopedModelDriven" />
- <interceptor-ref name="modelDriven" />
- <interceptor-ref name="fileUpload" />
- <interceptor-ref name="checkbox" />
- <interceptor-ref name="staticParams" />
- <interceptor-ref name="params" >
- <param name="excludeParams" >dojo/..*</param>
- </interceptor-ref>
- <interceptor-ref name="conversionError" /> //去掉这行
- <interceptor-ref name="validation" >
- <param name="excludeMethods" >input,back,cancel,browse</param>
- </interceptor-ref>
- <interceptor-ref name="workflow" >
- <param name="excludeMethods" >input,back,cancel,browse</param>
- </interceptor-ref>
- </interceptor-stack>
- 当然我们说了不修改他的源文件。我们就采用覆盖的方法来重写他
- 在struts.xml中加入
- <interceptors>
- <interceptor-stack name="myinterceptor" >
- <interceptor-ref name="exception" />
- <interceptor-ref name="alias" />
- <interceptor-ref name="servletConfig" />
- <interceptor-ref name="prepare" />
- <interceptor-ref name="i18n" />
- <interceptor-ref name="chain" />
- <interceptor-ref name="debugging" />
- <interceptor-ref name="profiling" />
- <interceptor-ref name="scopedModelDriven" />
- <interceptor-ref name="modelDriven" />
- <interceptor-ref name="fileUpload" />
- <interceptor-ref name="checkbox" />
- <interceptor-ref name="staticParams" />
- <interceptor-ref name="params" >
- <param name="excludeParams" >dojo/..*</param>
- </interceptor-ref>
- <interceptor-ref name="validation" >
- <param name="excludeMethods" >
- input,back,cancel,browse
- </param>
- </interceptor-ref>
- <interceptor-ref name="workflow" >
- <param name="excludeMethods" >
- input,back,cancel,browse
- </param>
- </interceptor-ref>
- </interceptor-stack>
- </interceptors>
- <default -interceptor-ref name= "myinterceptor" ></ default -interceptor-ref> //这句就是让struts2采用我们的拦截器
- 我们自已写了个拦截器,叫myinterceptor
- 这个拦截器除了去掉了conversionError这个东西以外和默认的没有区别
- 我们就将这个自定义的东西改为默认的..这样你以后的所有action都会采用myinterceptor这个拦截了.只是少了那个转换错误的东西。
struts内置的转换器会提示转换失败
最新推荐文章于 2023-05-25 09:38:14 发布