我在我的webapp国际化工作,我想再次重用一些消息。
faces-config.xml
<locale-config>
<default-locale>en</default-locale>
<supported-locale>uk</supported-locale>
</locale-config>
<resource-bundle>
<base-name>international.message-labels</base-name>
<var>msgLabel</var>
</resource-bundle>
资源包消息
inputLength=Length should be {0} or more
例子:
<p:inputText id="firstName" value="#{user.firstName}"
placeholder="#{msgLabel.namePlaceHolder}" size="25" required="true"
styleClass="logRegLabel" validatorMessage="#{msgLabel.inputLength}"
requiredMessage="#{msgLabel.fieldCannotEmpty}">
<f:param value="3" />
<f:validateLength minimum="3" />
<p:ajax event="blur" update="firstNameMsg" global="false" />
</p:inputText>
在我看到的所有例子中,它都是有效的。但这里我总是得到Length should be {0} or more
而不是Length should be 3 or more
我也试过这个validatorMessage="#{msgLabel['inputLength']}"
此外,我试图删除p:inputText
的所有其他参数,但它没有帮助
参数化包消息的<f:param>
只在<h:outputFormat>
内部工作。
<h:outputFormat value="#{bundle.key}">
<f:param value="value for {0}" />
<f:param value="value for {1}" />
<f:param value="value for {2}" />
</h:outputFormat>
JSF不提供任何参数化任意属性值的工具。最好的办法是创建一个自定义EL函数,它的工作如下:
<p:inputText ... validatorMessage="#{my:format1(msgLabel.inputLength, '3')}" />
如果您碰巧使用JSF实用程序库OmniFaces,那么您可以使用它的of:format1()
。
<p:inputText ... validatorMessage="#{of:format1(msgLabel.inputLength, '3')}" />
或者它的<o:outputFormat>
,它支持捕获EL变量中的输出。
<o:outputFormat value="#{msgLabel.inputLength}" var="validatorMessage">
<f:param value="3" />
</o:outputFormat>
<p:inputText ... validatorMessage="#{validatorMessage}" />