2014-01-21 27 views
0

目前我的项目已在我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

它们存储为请求属性(如请求范围的托管的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?