JSF Converter的错误消息中的自定义变量

时间:2011-03-04 22:25:01

标签: validation jsf converter

我有一个表单页面,其中包含一个接受日期的inputText字段。我们有一个转换器将字符串从文本框转换为Date对象(即“2011-03-01”到java.util.Date(“2011-03-01”“))

如果字符串不是日期,例如“123”,则会显示验证错误消息,例如“value(123)必须是日期”。

目前,在我的.properties文件中,我看到了:

  

javax.faces.converter.DateTimeConverter.DATE =值   ({0})必须是日期

我需要通过准确指定哪个字段必须是日期来使此错误消息更加清晰。 (因为表单上可能有多个日期文本字段)。

我想将其更改为:

  

javax.faces.converter.DateTimeConverter.DATE =该   值为{{1}的字段“{0}”必须为a   日期

但是,我不确定JSF如何自动填写{0}和{1}。如何在JSF Converter错误消息中指定我自己的变量?

注意:我添加了尝试创建自己的验证器(不要与转换器混淆)但似乎JSF框架在其生命周期中的验证之前进行转换。

1 个答案:

答案 0 :(得分:20)

从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中,f:convertDateTime的{​​{3}}如下:

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_detailDATE_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

另见: