如何根据从托管bean收到的值获取资源包值?

时间:2013-03-06 06:50:51

标签: jsf xhtml facelets resourcebundle

我正在寻找可能性,如果我可以根据从托管bean收到的值获得resourcbundle值。它可能在datatable,datagrid以及其他呈现值的组件中很有用。

我尝试使用此代码:

<h:outputText value="#{resourceBundle['myBean.myMsg']}" />

但它没有用。我的outputText无法从resourcebundle获取值。结果如下:

???myBean.myMsg

2 个答案:

答案 0 :(得分:5)

如果您收到???myBean.myMsg,则意味着它无法在资源文件中找到 myBean.myMsg 字符串...

我想你想使用myBean.myMsg中的密钥(而不是字符串 myBean.myMsg )?

在这种情况下,只需删除围绕它的''

<h:outputText value="#{resourceBundle[myBean.myMsg]}" />

否则它将用作字符串而不是EL表达式

答案 1 :(得分:1)

如果您希望在所有视图中访问它,则需要faces-config.xml 中声明您的捆绑包,例如:

<application>
    <resource-bundle>
        <base-name>path-to-your-resource-bundle</base-name>
        <var>bundle</var>
    </resource-bundle>
</application>

以便可以使用

进行查看
<h:outputText value="#{bundle['myBean.myMessage']}" />

直接在视图中加载

<f:loadBundle basename="path-to-your-resource-bundle" var="bundle" />
<body>
    <h:outputText value="#{bundle['myBean.myMessage']}" />
</body>  

在任何情况下,您的资源包都必须包含字符串,其中包含您的消息的名称和值对。

myBean.myMessage = This is my message

另外值得注意的是,资源包应该放在项目的src/main/resources文件夹中。因此,上述文件夹中的bundle.propertiesbase-name bundle

关于用法:

  • 使用消息包本身的字符串:<h:outputText value="#{bundle['myBean.myMessage']}" />
  • 使用托管bean的属性来评估捆绑包中所需的字符串:<h:outputText value="#{bundle[myBean.myMessage]}" />

    @ManagedBean
    @...Scoped
    public class MyBean {
    
        private String myMeggase = "bundle.string";//getter + setter
    
    }
    
  • 将值存储在<ui:param>中,这可能对模板有用:

    <ui:param name="bndl" value="#{myBean.myMessage}"/>
    <h:outputText value="#{bundle[bndl]}" />
    

    使用相同的托管bean。