开发者

Custom Variables in JSF Converter's Error Message

开发者 https://www.devze.com 2023-02-15 09:47 出处:网络
I have a form page that has an inputText field that accepts a date.We have a converter that converts the string from the textbox into a Date object (ie. \"2011-03-01\" to java.util.Date(\"2011-03-01\"

I have a form page that has an inputText field that accepts a date. We have a converter that converts the string from the textbox into a Date object (ie. "2011-03-01" to java.util.Date("2011-03-01"") )

If the string is not a date, like "123" then a validatio开发者_如何学编程n error message will be displayed like "value (123) must be a date".

Currently, in my .properties file, I see:

javax.faces.converter.DateTimeConverter.DATE=value ({0}) must be a date

I need to make this error message more clear by specifying exactly which field must be a date. (As there could be more than one date text fields on the form).

I would like to change it to something like:

javax.faces.converter.DateTimeConverter.DATE=The field "{0}" with value ({1}) must be a date

However, I am unsure how JSF automatically fills in the {0} and {1}. How do I specify my own variables inside the JSF Converter error message?

Note: I have added tried creating my own validator (not to be confused with converter) but it seems that the JSF framework does conversion before validation in its lifecycle.


Starting from JSF 1.2, use the converterMessage attribute to replace the entire message, such as:

<h:inputText value="#{user.dateOfBirth}" converterMessage="Format must be: yyyy-MM-dd">
    <f:convertDateTime pattern="yyyy-MM-dd" />
</h:inputText>

Otherwise, JSF by default shows the _detail message in the <h:message>. Only when you use <h:message showDetail="false" showSummary="true"> then the one similar as in your question will be displayed. I'm not sure what JSF version you're using, but in my JSF 2.0.3 the default detail message for f:convertDateTime is the following:

javax.faces.converter.DateTimeConverter.DATE_detail = {2}: ''{0}'' could not be understood as a date. Example: {1}

The {2} will be substituted with the client ID or the label attribute of the input field when present.

<h:inputText value="#{user.dateOfBirth}" label="Date of birth">
    <f:convertDateTime pattern="yyyy-MM-dd" />
</h:inputText>

Both the DATE and DATE_detail message must be defined for the DATE_detail message to be used:

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

See also:

  • JSF 2.0 tutorial - Finetuning validation
0

精彩评论

暂无评论...
验证码 换一张
取 消