自定义转换器消息以包含带粗体无效字符的输入

时间:2015-08-03 06:16:42

标签: jsf jsf-2 converter message

Mojarra 2.1.29

考虑标准的javax.faces.Integer转换器。如果我们输入无效的号码,我们会收到消息:

  

'foo'必须是由一个或多个数字组成的数字

如果数字包含无效的字符,我需要按如下方式自定义消息,打印输入以及粗体无效字符。例如1234add

  

该号码包含无效的字符:1234 添加

我认为不可能只定义我自己的包含消息的自定义属性文件,如下所示:

javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}: ''{0}'' must be a number consisting of one or more digits.

我是否必须编写自己的自定义转换器,它是javax.faces.Integer

的子类

是否可以在不编写自定义转换器的情况下以这种方式自定义错误消息?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。它只是hacky有两个原因:

  • 格式化逻辑已封装在EL而不是可重用的Java类中(尽管您可以创建一个特殊的标记文件,以防止在所有地方进行复制,以防您打算在其他地方重用相同的逻辑)。
  • 在面部消息中需要HTML,而<h:message>不支持取消HTML(因此需要手动抓取消息的<h:outputText>来显示消息)。

这是:

<h:inputText binding="#{input}"
    converter="javax.faces.Integer" 
    converterMessage="The number contains invalid charaters: #{input.submittedValue.replaceAll('(\\d*)?(\\D+)(\\d*)?', '$1&lt;b&gt;$2&lt;/b&gt;$3')}" />
<h:outputText id="messageForInput" value="#{facesContext.getMessageList(input.clientId)[0].summary}" escape="false" />

注意binding指向局部变量而不是bean属性的重要性。

另见: