我正在寻找可能性,如果我可以根据从托管bean收到的值获得resourcbundle值。它可能在datatable,datagrid以及其他呈现值的组件中很有用。
我尝试使用此代码:
<h:outputText value="#{resourceBundle['myBean.myMsg']}" />
但它没有用。我的outputText无法从resourcebundle获取值。结果如下:
???myBean.myMsg
答案 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.properties
将base-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。