Pass parameters to messages from resource bundle to components other than **h:outputFormat**

被刻印的时光 ゝ 提交于 2019-11-29 03:58:25

How about this approach ?

EL expression allow you to define a function .You first define a EL expression 's function , which accepts a resource bundle , its message key and placeholder 's parameter and output the resolved message .

public static String geti18nMsg(ResourceBundle bundle ,String msgKey, String paramValue ) {
    String  msgValue = bundle.getString(msgKey);
    MessageFormat   messageFormat = new MessageFormat(msgValue);
    Object[] args = {paramValue};
    return messageFormat.format(args);
}

Then call this function to get the resolved message in the <h:commandButton> :

<h:commandButton value="#{f:geti18nMsg(myBundle , parametricMessage, someParameterValue)}"/>

Try this:

<h:commandButton>
    <h:outputFormat value="#{myBundle['parametricMessage']}">
        <f:param value="#{myBundle['someParameterValue']}"/>
    </h:outputFormat>
</h:commandButton>

Btw, this does what you want and also avoids having to write backing bean code.

Well I didn't find good answer on that, so the question will remain open. A good practice I've discovered, is to have a special class that represents each resource bundle (that has parametric stuff), and to transfer all the message formation, and working with context there (like, acquire locale from FacesContext, get a ResourceBundle, apply parameters, etc). And finally to provide access to a singleton of such service class from your ManagedBean.

This requires some additional work to be done, but solves the problem and is worth of the time.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!