为什么f:param值没有设置为来自资源包的消息?

时间:2015-07-11 22:55:54

标签: jsf internationalization resourcebundle

我在webapp中使用国际化,我想再次重用一些消息 的面向-config.xml中

shuffleDeck: function (deck) {
        var newDeck = deck;
        for (i = 0; i<newDeck.length;i++){
            randomIndex = Math.floor(Math.random() * deck.length);
            newDeck[i] = deck[randomIndex];
            deck.splice(randomIndex,1);  
            console.log(deck.length);
        }

        return newDeck;
    }

来自资源包的消息

<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']}"的所有其他参数,但它没有帮助

1 个答案:

答案 0 :(得分:2)

<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没有提供任何参数化任意属性值的工具。你最好的选择是创建一个custom EL function来完成下面的工作:

<p:inputText ... validatorMessage="#{my:format1(msgLabel.inputLength, '3')}" />

如果您碰巧使用JSF实用程序库OmniFaces,那么您可以使用它的of:format1()

<p:inputText ... validatorMessage="#{of:format1(msgLabel.inputLength, '3')}" />

或支持在EL变量中捕获输出的<o:outputFormat>

<o:outputFormat value="#{msgLabel.inputLength}" var="validatorMessage">
    <f:param value="3" />
</o:outputFormat>
<p:inputText ... validatorMessage="#{validatorMessage}" />