Java Struts2:如何停用FieldValidator的默认消息

Java Struts2:如何停用FieldValidator的默认消息,java,struts2,validation,Java,Struts2,Validation,我正在使用Struts2处理JAVA EE项目,我有一个jsp文件,其中包含字段名称和年龄: <s:form action="login" method="post"> <s:textfield name="name" label="Name" size="20" /> <s:textfield name="age" label="Age" size="20" /> <s:submit label="Submit" a


我正在使用Struts2处理JAVA EE项目,我有一个jsp文件,其中包含字段名称和年龄:

<s:form action="login" method="post">
      <s:textfield name="name" label="Name" size="20" />
      <s:textfield name="age" label="Age" size="20" />
      <s:submit label="Submit" align="center" />
   </s:form>
一切正常,但当我输入无效年龄(例如“test”字符串)时,我会看到消息,我在注释中设置的“请输入有效年龄”和另一个默认值“年龄”字段的无效字段值“,因此我的问题是如何在第二条消息中取消激活它

编辑:这张图片显示了我收到的信息

谢谢。

首先阅读

然后阅读官方文件(粗体是我的):

类型转换错误处理提供了一种简单的方法来区分 在输入验证问题和输入类型转换之间 问题

在类型转换过程中发生的任何错误都可能被忽略,也可能不希望被忽略 报道。例如,报告无法输入“abc” 转换成一个数字可能很重要。另一方面,报告 无法将空字符串“”转换为数字可能不正确 重要信息-尤其是在很难控制的web环境中 区分用户未输入值与输入空白 价值观

默认情况下,使用通用i18n报告所有转换错误 键
xwork.default.invalid.fieldvalue
,您可以覆盖它( 默认文本是字段“xxx”的无效字段值,其中xxx是 在您的全局i18n资源包中的字段名。

但是,有时您可能希望在服务器上覆盖此消息 按场计算。您可以通过添加一个与 只需使用该模式执行您的操作(action.properties)
无效的.fieldvalue.xxx
,其中
xxx
是字段名

重要的是要知道这些错误实际上都不是错误 直接报道。相反,它们被添加到一个名为 ActionContext中的conversionErrors。这张地图有几种方法 然后可以访问,并相应地报告错误

错误报告有两种方式:

  • 在全球范围内,使用
  • 在每个字段的基础上,使用
默认情况下,转换拦截器包含在 在默认堆栈中。保持转化 全局报告错误,更改拦截器堆栈,并添加 其他验证规则。

那么你的情况是什么

您正在使用默认堆栈(或具有相同行为的自定义堆栈),该堆栈在验证侦听器之前运行ConversionErrors侦听器

然后,由于您正在定义一个
ConversionErrorFieldValidator
,因此您同时使用了两种机制,而您应该只使用其中一种机制

您可以使用以下三种方法之一:

全球资源方式

  • 删除您的
    ConversionErrorFieldValidator
  • 创建一个全局i18n资源包并添加密钥

    xwork.default.invalid.fieldvalue = Please enter a valid "{0}"
    
本地资源方式

  • 删除您的
    ConversionErrorFieldValidator
  • 创建一个action resource bundle(针对具有此需求的每个action/field)并添加

定制方式

  • 对于需要执行的所有操作,请从堆栈中删除ConversionError拦截器
对于前两个解决方案,您不能使其短路,那么您将同时出现转换和(第一个,如果短路)验证器错误。但是这些值将被保留并自动重新填充(例如,将
abc
插入
int
字段,将在页面中重新填充
abc

使用上一个解决方案,您的消息将被短接,但您必须手动处理字段的重新填充,并且您需要记住对每个字段使用自定义的
@ConversionErrorFieldValidator
,因为除非转换错误消息被吞没


就个人而言,我会选择解决方案1。这是最安全的,而且基本上不需要工作。

事实上,这是法语:)Très bien,et merci pour les vots:)
xwork.default.invalid.fieldvalue = Please enter a valid "{0}"
invalid.fieldvalue.age = Please enter a valid age