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
?
是否可以在不编写自定义转换器的情况下以这种方式自定义错误消息?
答案 0 :(得分:1)
是的,这是可能的。它只是hacky有两个原因:
<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<b>$2</b>$3')}" />
<h:outputText id="messageForInput" value="#{facesContext.getMessageList(input.clientId)[0].summary}" escape="false" />
注意binding
指向局部变量而不是bean属性的重要性。