目前我的项目在我的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>
我需要使用两个资源包,将始终使用公共包,并在我的网站的视图页面中进行硬编码。但是,我希望只使用两个选项包中的一个,option1
或option2
。有没有办法根据条件指定要使用的两个选项包中的哪一个。期望的结果就是这种情况:
<h:outputText value="#{oneOfTheOptions['contact.explanation']}"/>
oneOfTheOptions
将动态设置为适当的包名称之一。 JSF中是否有可以实现此目的的机制?如果没有,是否可以为视图组件动态设置资源包?
谢谢,
答案 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?