【问题标题】:JSF Validation messageJSF 验证消息
【发布时间】:2010-11-12 16:03:30
【问题描述】:

我正在使用 JSF 1.2 和 Richfaces 3.3.FINAL。我有一个inputText,它必须是 1 到 999999999999 之间的数字。

<h:inputText id="prodId" required="true" value="#{product.productId}" maxlength="12" >
    <f:validator validatorId="anotherValidatorValidator" />
    <f:validateLongRange minimum="1" maximum="999999999999"/>
</h:inputText>

我希望我的验证消息基本上表明用户必须输入一个介于 1 和 99...9 之间的数字。如果我输入数字 -1 并提交表单,这就是出现的消息,这就是我想要的。

但是,如果我在该字段中写字母,请说“abcd”,我明白了:

prodId: 'abcd' 必须是介于 -9223372036854775808 到 9223372036854775807 之间的数字 例如:98765432

这条消息让用户感到困惑,因为如果提交了建议的负数,另一个validateLongRange 验证器将抛出一条消息,现在要求输入正确范围内的数字。

出现第二条消息是因为当提交字符串被强制转换为 Long(这是支持 bean 属性的类型)并出现消息 javax.faces.component.UIInput.CONVERSION_MESSAGE_ID 时抛出了 ConverterException

我能否以某种方式覆盖它(不是针对所有 ConverterException 情况,仅针对特定情况),或者显示其他 validateLongRange 的消息?

【问题讨论】:

  • JSF 1.x 还是 2.x? faces-config 中有 &lt;message-bundle&gt; 吗?
  • JSF 1.2 和 Richfaces 3.3.3.FINAL
  • 我没有 ,只有一个 。但是,如果这是您的建议,我不想在所有情况下都覆盖 CONVERSION_MESSAGE_ID。这对其他情况确实有意义。
  • 不,只是为了简化消息检索 :) 没有它,您必须自己对其进行硬编码或导入 JSF 实现特定的类来获取所需的消息。

标签: java jsf message validation


【解决方案1】:

该消息实际上来自javax.faces.converter.LongConverter.LONG_detail,并且仅在您将h:message(s) 配置为showSummary="false"showDetail="true" 时才会出现。否则,默认(摘要)消息将是 javax.faces.converter.LongConverter.LONG,即 {2}: ''{0}'' must be a number consisting of one or more digits.,这反过来更有意义。

如果更改消息详细信息显示也不是您所追求的,并且您确实希望转换器显示与 LongRangeValidator 完全相同的消息,那么您最好的选择是提供一个自定义转换器来显示想要的消息。但是,您必须自己对消息进行硬编码,因为 JSF 不支持任何 API 工具来获取默认消息消息模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多