为什么没有在资源包的消息中设置参数值



我在我的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}" />

相关内容

  • 没有找到相关文章

最新更新