将参数从资源包传递给组件,而不是**h:outputFormat**



是否有一种方便的方法将参数传递到消息从资源包到组件,而不是h:outputFormat?

例如:

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

但我需要它作为一个按钮,像这样(这不会工作):

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

当然,我可以使用链接而不是按钮,我可以通过托管bean中的属性来实现它,但在这个问题中,我正在寻找一种方便的方式来使用按钮…

我使用的是RichFaces 3.3.3, JSF2, facelets.

这个方法怎么样?

EL表达式允许您定义一个函数,您首先定义EL表达式的函数,该函数接受一个资源包、它的消息键和占位符的参数,并输出解析后的消息。

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);
}

然后调用此函数以获得<h:commandButton>中解析的消息:

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

试试这个:

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

顺便说一句,这是您想要的,也避免了必须编写后台bean代码。

我没有找到很好的答案,所以这个问题将继续开放。我发现的一个好做法是,使用一个特殊的类来表示每个资源包(有参数的东西),并传输所有的消息格式,并处理那里的上下文(比如,从FacesContext获取locale,获取ResourceBundle,应用参数等)。最后,从ManagedBean提供对此类服务类的单例的访问。

这需要做一些额外的工作,但解决了问题,值得花时间。

相关内容

  • 没有找到相关文章

最新更新