我正在使用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
验证器将抛出一条消息,现在要求正确范围之间的数字。
发生第二条消息是因为当submittes String被强制转换为Long(这是支持bean属性的类型)并且消息ConverterException
出现时,抛出javax.faces.component.UIInput.CONVERSION_MESSAGE_ID
。
我可以以某种方式覆盖它(不是针对所有ConverterException情况,只针对特定情况),还是显示其他validateLongRange
的消息?
答案 0 :(得分:2)
该消息实际上来自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工具来获取默认消息消息模板。