在很多时候,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这个拦截了.只是少了那个转换错误的东西。
到此结束!写得太乱了。自已看的。如果有人看到,请见谅文字太乱~~
分享到:
相关推荐
在Struts2中,类型转换器(Type Converter)是框架的一个关键特性,用于处理Action类中属性的自动类型转换。这个特性使得开发者无需手动进行数据类型之间的转换,从而提高了开发效率和代码的可读性。 标题中的...
这篇博客“Struts2数据类型转换器”可能深入探讨了这个主题,虽然具体的细节无法在此给出,但我们可以根据Struts2中数据类型转换的工作原理来展开讨论。 在Java Web开发中,用户通过表单提交的数据通常是字符串形式...
首先,了解Struts2中的类型转换器。Struts2框架提供了内置的转换器,可以处理基本类型和某些复杂类型的转换。然而,对于自定义格式或特殊需求,我们需要自定义转换器。转换器的实现基于`Converter`接口,该接口包含...
这个过程涉及到了类型转换,Struts2内置了一套转换器机制,能够自动处理基本类型和一些常见类型的转换。然而,对于如Date这样的复杂类型,需要自定义转换器来处理。 创建自定义类型转换器的步骤如下: 1. **定义...
在Struts2中,类型转换器(TypeConverter)扮演着关键角色,它负责将HTTP请求参数转换为Action类中相应属性的正确数据类型。本教程主要探讨Struts2.1源代码中的自定义类型转换器。 1. **类型转换器的作用** 类型...
文件名“struts2-converter”可能包含的是一个示例项目,用于演示如何在Struts2中创建和使用转换器。在这个项目中,可能会有以下部分: 1. 自定义的Converter类实现:这将是一个实现了Converter接口的类,包含了...
在本教程中,我们将深入探讨如何在Struts2中实现自定义类型转换器。 首先,我们需要了解Struts2的类型转换过程。当用户通过表单提交数据时,Struts2会尝试将这些请求参数转换为Action类中对应属性的类型。如果默认...
在Struts2中,实现类型转换主要有两种方式: 1. 使用内置的类型转换器:Struts2已经内置了一些常见的类型转换器,如String到Integer、Date等。当Struts2发现需要的转换器时,会自动查找并使用。 2. 自定义类型转换器...
struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换
本文主要介绍Struts1和Struts2中的自定义类型转换器,并探讨其实现机制。 #### 二、Struts1中的自定义类型转换器 在Struts1中,自定义类型转换器主要是通过继承`com.sun.org.apache.commons.beanutils.Converter`...
如果Struts2内置的转换器无法满足需求,开发者还可以自定义转换器。 Struts2标签库是其强大的视图层工具,简化了JSP页面的编写。例如: 1. `<s:form>`:创建表单,自动绑定Action的属性。 2. `<s:textfield>`:创建...
在Struts2中,用户通过表单提交的数据通常是字符串,而服务器端处理时往往需要将其转化为其他类型,如整型、浮点型或日期等。Struts2内置了一套类型转换机制,能够自动将字符串数据转化为预设的类型。如果默认的转换...
类型转换在Struts2中主要通过实现ognl.TypeConverter接口来完成。当需要自定义转换器时,你需要创建一个类并实现这个接口,提供convertFromString和convertToString两个方法,分别处理字符串到目标类型的转换和目标...
在Struts2中,类型转换主要由`Converter`接口实现,它的主要职责是将HTTP请求参数转换为Action类的属性。当我们在Action类中定义一个属性,而这个属性的类型与请求参数的类型不匹配时,Struts2就会自动进行类型转换...
要使用Struts的日期转换器,首先你需要在Action类中定义一个日期类型的属性,并为其添加相应的注解`@DateTimeFormat`,或者在Struts配置文件中定义一个转换器。`@DateTimeFormat`注解允许你指定日期的输入格式,这样...
在Struts2中,可以通过以下方式配置自定义类型转换器: 1. 在Action类中使用注解`@TypeConverter`直接指定转换器类。 2. 在`struts.xml`配置文件中使用`<conversion>`元素定义转换规则,包括指定转换器类和转换的...
本练习主要关注如何在Struts2中实现自定义的数据类型转换,以满足特定业务需求。 首先,我们需要了解Struts2的数据转换机制。当用户提交表单数据时,Struts2会通过ActionContext获取到这些数据,并尝试将其转换为...
这个压缩包“struts2 全局类型转换器.rar”可能包含了一个示例或教程,教你如何在Struts2中实现全局类型转换器,以统一处理不同类型的字段转换。在Struts2中,类型转换器扮演着重要的角色,它允许你将用户输入的数据...