【问题标题】:How to select one of many Resource Bundles如何选择众多资源包之一
【发布时间】:2014-01-21 01:35:53
【问题描述】:

目前我的项目在我的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 中是否有一种机制可以做到这一点?如果没有,还有其他方法可以为视图组件动态设置资源包吗?

谢谢,

【问题讨论】:

    标签: jsf resourcebundle


    【解决方案1】:

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

    假设 EL 变量 #{bundleKey} 可以保存字符串值 "common""option1""option2" 之一,那么应该这样做:

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

    它甚至可以是一个 bean 属性:

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

    请注意,如果您使用的是 JSF2/Facelets,则不需要在其周围使用整个 &lt;h:outputText&gt;。另见Is it suggested to use h:outputText for everything?

    【讨论】:

      猜你喜欢
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      相关资源
      最近更新 更多