我有一个表单页面,其中有一个接受日期的 inputText 字段。我们有一个转换器,可以将文本框中的字符串转换为 Date 对象(即“2011-03-01”到 java.util.Date(“2011-03-01”) )
如果字符串不是日期,例如“123”,则会显示验证错误消息,例如“值 (123) 必须是日期”。
目前,在我的 .properties 文件中,我看到:
javax.faces.converter.DateTimeConverter.DATE=value ({0}) must be a date
我需要通过准确指定哪个字段必须是日期来使此错误消息更清晰。 (因为表单上可能有多个日期文本字段)。
我想将其更改为:
javax.faces.converter.DateTimeConverter.DATE=The field "{0}" with value ({1}) must be a date
但是,我不确定 JSF 如何自动填充 {0} 和 {1}。如何在 JSF Converter 错误消息中指定我自己的变量?
注意:我已添加尝试创建自己的验证器(不要与转换器混淆),但 JSF 框架似乎在其生命周期中的验证之前进行转换。
最佳答案
从 JSF 1.2 开始,使用 converterMessage
属性来替换整个消息,例如:
<h:inputText value="#{user.dateOfBirth}" converterMessage="Format must be: yyyy-MM-dd">
<f:convertDateTime pattern="yyyy-MM-dd" />
</h:inputText>
<小时/>
否则,JSF 默认显示 _detail
<h:message>
中的消息。仅当您使用<h:message showDetail="false" showSummary="true">
时然后就会显示与您的问题类似的内容。我不确定您使用的是什么 JSF 版本,但在我的 JSF 2.0.3 中 default detail message对于 f:convertDateTime
如下:
javax.faces.converter.DateTimeConverter.DATE_detail = {2}: ''{0}'' could not be understood as a date. Example: {1}
{2}
将替换为客户端 ID 或 label
输入字段存在时的属性。
<h:inputText value="#{user.dateOfBirth}" label="Date of birth">
<f:convertDateTime pattern="yyyy-MM-dd" />
</h:inputText>
两者都是DATE
和DATE_detail
必须为 DATE_detail
定义消息要使用的消息:
javax.faces.converter.DateTimeConverter.DATE=Date format must be: dd/mm/yyyy
javax.faces.converter.DateTimeConverter.DATE_detail=Date format must be: dd/mm/yyyy
<小时/>
另请参阅:
关于validation - JSF Converter 错误消息中的自定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5199954/