3

在我的 struts2 应用程序中,我有一个名为 carrierNo 的字段,它接受整数,当我将字符串放入其中时,它会给我这个验证错误消息:

    *Invalid field value for field "carrierNo".*

我可以像这样在属性文件中自定义此错误消息

    invalid.fieldvalue.carrierNo=this field does not accept characters

但我不想为我的网络应用程序中的每个非字符串字段编写自定义消息,我想让它通用,我尝试了以下但它没有用

  invalid.fieldvalue.%{getText(fieldName)}=this field does not accept characters

如果无法通用,请帮助我完全禁用此消息。然后我将使用我在属性文件中定义的单个消息的转换字段验证器。

所以我的请求是帮助我制作这个 invalid.fieldvalue.carrierNo 像这种形式的一般东西 invalid.fieldvalue.%{getText(fieldName)}

或禁用显示此错误消息字段“carrierNo”的字段值无效。

4

2 回答 2

4

您可以创建自己的实现ConversionErrorInterceptor来找出失败字段的类并获取您的自定义消息。

编辑:
查看源代码ConversionErrorInterceptor。例如,您可以在自定义拦截器内部intercept方法中执行类似的操作

// get field by name from action
Field f = invocation.getAction().getClass().getDeclaredField(propertyName);
// get type of field
Class clz = f.getType();

String message = LocalizedTextUtil.findDefaultText(XWorkMessages.DEFAULT_INVALID_FIELDVALUE + "." + clz,
                    invocationContext.getLocale());

并在您的 messages.properties 文件中放置xwork.default.invalid.fieldvalue.int,xwork.default.invalid.fieldvalue.float等。

于 2012-10-02T11:07:54.690 回答
0

删除转换消息的最简单方法是从默认堆栈中删除“ conversionError拦截器。然而,删除它的一个问题是 IIRC 它还负责将原始(未转换的)值放回字段中,而不是将它们替换为失败转换的值。这可能会导致不愉快的用户体验,IMO。

制作“...不接受字符”转换错误消息感觉不对:转换错误包含整个应用程序,字符可能不是转换错误的原因。

于 2012-09-10T12:02:30.457 回答