如何选择众多资源包中的一个

时间:2014-01-21 01:35:53

标签: jsf resourcebundle

目前我的项目在我的faces-config.xml中有三个资源包,如下所示:

<resource-bundle>
  <base-name>com.example.text.common</base-name>
<var>common</var>
</resource-bundle>
<resource-bundle>
  <base-name>com.example.text.option1</base-name>
  <var>option1</var>
</resource-bundle>
<resource-bundle>
  <base-name>com.example.text.option2</base-name>
  <var>option2</var>
</resource-bundle>

我需要使用两个资源包,将始终使用公共包,并在我的网站的视图页面中进行硬编码。但是,我希望只使用两个选项包中的一个,option1option2。有没有办法根据条件指定要使用的两个选项包中的哪一个。期望的结果就是这种情况:

<h:outputText value="#{oneOfTheOptions['contact.explanation']}"/>

oneOfTheOptions将动态设置为适当的包名称之一。 JSF中是否有可以实现此目的的机制?如果没有,是否可以为视图组件动态设置资源包?

谢谢,

1 个答案:

答案 0 :(得分:1)

它们存储为请求属性(如请求范围的托管bean)。因此,您应该能够使用括号表示法#{requestScope}中的动态键通过请求范围映射#{map[key]}获取它们。

想象一下,EL变量#{bundleKey}可以包含其中一个字符串值"common""option1""option2",那么这应该是:

#{requestScope[bundleKey]['contact.explanation']}

它甚至可以是bean属性:

#{requestScope[bean.bundleKey]['contact.explanation']}

请注意,只要您使用的是JSF2 / Facelets,就不需要整个<h:outputText>。另请参阅Is it suggested to use h:outputText for everything?