struts内置的转换器会提示转换失败

  1. 在很多时候,struts2里面的类型转换器的错误信息实在是烦人。比如我们在xml验证器里将  
  2. 页面age字段(int 型)的xml验证方法配置了,用户输入一个abc时,这时候会出现两条信息,一就是这个内置转换器的转换失败的错误信息,一串英文,虽然可以国际化一下,但是这条信息出来以后,age自已的xml验证器也要提示错误.比如你age 规定 10 - 100 之间的数字,但是你输入了abc,struts内置的转换器会提示转换失败,同时将值给个 0 ,这时候xml的验证又会失败。成了两个错误信息。  
  3.   
  4.   
  5. 我发现有两种方法可以消除他的这个自带的转换失败信息:其实内型转换失败完全可以用xml验证器就够了。他里面也有验证类型的。所以struts2里面的那个就显得多余了.  
  6.   
  7.   
  8. 第一种方法是找到xwork的包,里面的  
  9. package  com.opensymphony.xwork2这个目录下  
  10.   
  11. 有个xwork-message.properties文件,这个文件里面的内容如下  
  12.   
  13.   
  14. xwork.error.action.execution=Error during Action invocation  
  15. xwork.exception.missing-action=There is no Action mapped for  action name { 0 }.  
  16. xwork.exception.missing-package -action=There is no Action mapped  for  namespace { 0 } and action name { 1 }.  
  17. xwork.default .invalid.fieldvalue=Invalid field value  for  field  "{0}" .  
  18.   
  19. 可以清楚的看到最讨厌的那个Invalid field value for  field "{ 0 }就在最后一行。我们可以删掉这行。然后把源文件重新编译成jar就行了.这样的话,就不会显示类型转换失败了。要验证用户输入的类型对不对的话,可以用xml自带的东西  
  20.   
  21.   
  22. 第二种方法:  
  23.   
  24. 这种方法可以不修改源文件.  
  25.   我们知道struts2有个叫拦截器的东西.其实这些类型转换啊什么的都是用这个东西现实的。知道这点就好办了。我们去把那个默认的拦截器stack改了就行了。  
  26.   
  27. 查看struts-default .xml里面,看到了默认截拦器 他使用了conversion这个东西。  
  28. 把这行去掉就行了。做个我们自已的拦截器stack,然后加入到struts.xml文件中  
  29.   
  30. 这里就是struts-default .xml文件  
  31.   
  32.      <interceptor-stack name="defaultStack" >  
  33.                 <interceptor-ref name="exception" />  
  34.                 <interceptor-ref name="alias" />  
  35.                 <interceptor-ref name="servletConfig" />  
  36.                 <interceptor-ref name="prepare" />  
  37.                 <interceptor-ref name="i18n" />  
  38.                 <interceptor-ref name="chain" />  
  39.                 <interceptor-ref name="debugging" />  
  40.                 <interceptor-ref name="profiling" />  
  41.                 <interceptor-ref name="scopedModelDriven" />  
  42.                 <interceptor-ref name="modelDriven" />  
  43.                 <interceptor-ref name="fileUpload" />  
  44.                 <interceptor-ref name="checkbox" />  
  45.                 <interceptor-ref name="staticParams" />  
  46.                 <interceptor-ref name="params" >  
  47.                   <param name="excludeParams" >dojo/..*</param>  
  48.                 </interceptor-ref>  
  49.                 <interceptor-ref name="conversionError" />  //去掉这行   
  50.                 <interceptor-ref name="validation" >  
  51.                     <param name="excludeMethods" >input,back,cancel,browse</param>  
  52.                 </interceptor-ref>  
  53.                 <interceptor-ref name="workflow" >  
  54.                     <param name="excludeMethods" >input,back,cancel,browse</param>  
  55.                 </interceptor-ref>  
  56.             </interceptor-stack>  
  57.     
  58.   
  59. 当然我们说了不修改他的源文件。我们就采用覆盖的方法来重写他  
  60.   
  61. 在struts.xml中加入  
  62.     <interceptors>  
  63.             <interceptor-stack name="myinterceptor" >  
  64.                 <interceptor-ref name="exception"  />  
  65.                 <interceptor-ref name="alias"  />  
  66.                 <interceptor-ref name="servletConfig"  />  
  67.                 <interceptor-ref name="prepare"  />  
  68.                 <interceptor-ref name="i18n"  />  
  69.                 <interceptor-ref name="chain"  />  
  70.                 <interceptor-ref name="debugging"  />  
  71.                 <interceptor-ref name="profiling"  />  
  72.                 <interceptor-ref name="scopedModelDriven"  />  
  73.                 <interceptor-ref name="modelDriven"  />  
  74.                 <interceptor-ref name="fileUpload"  />  
  75.                 <interceptor-ref name="checkbox"  />  
  76.                 <interceptor-ref name="staticParams"  />  
  77.                 <interceptor-ref name="params" >  
  78.                     <param name="excludeParams" >dojo/..*</param>  
  79.                 </interceptor-ref>  
  80.                   
  81.                 <interceptor-ref name="validation" >  
  82.                     <param name="excludeMethods" >  
  83.                         input,back,cancel,browse  
  84.                     </param>  
  85.                 </interceptor-ref>  
  86.                 <interceptor-ref name="workflow" >  
  87.                     <param name="excludeMethods" >  
  88.                         input,back,cancel,browse  
  89.                     </param>  
  90.                 </interceptor-ref>  
  91.             </interceptor-stack>  
  92.         </interceptors>  
  93.   
  94. <default -interceptor-ref name= "myinterceptor" ></ default -interceptor-ref>  //这句就是让struts2采用我们的拦截器   
  95.   
  96. 我们自已写了个拦截器,叫myinterceptor  
  97.   
  98. 这个拦截器除了去掉了conversionError这个东西以外和默认的没有区别  
  99.   
  100. 我们就将这个自定义的东西改为默认的..这样你以后的所有action都会采用myinterceptor这个拦截了.只是少了那个转换错误的东西。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值