在JSF2.x中声明资源包的不同方法

时间:2013-11-21 21:59:37

标签: jsf facelets resourcebundle jsf-2.2

我正在我的工作场所工作JSF2.2。我的faces-config.xml有资源包标签,它可以帮助我将一个变量分配给一个属性文件并在EL中使用该变量。

   <resource-bundle>
    <base-name>properties.common</base-name>
    <var>prop</var>
   </resource-bundle>

我还发现了另一种通过使用f:loadBundle标记来实现这一目标的方法

<f:loadBundle basename="properties.common" var="prop"/>

但这是一个本地化的解决方案,这意味着我必须在每一页都写出来。

  1. 如果我在模板中定义它,这会有用吗?如果是的话,我该如何实现它。

  2. 有没有其他方法可以使用要在EL中使用的变量全局声明资源(例如faces-config.xml)

2 个答案:

答案 0 :(得分:1)

  

如果我在模板中定义它,这会有用吗?

是。


  

如果是,我该如何实现它。

就像你说的一样。在模板中定义它。


  

还有其他方法我可以使用要在EL中使用的变量全局声明资源(例如faces-config.xml)

将它放在请求映射中,自己在视图中引用的请求范围bean的(post)构造函数中。

ResourceBundle bundle = ResourceBundle.getBundle("properties.common", facesContext.getViewRoot().getLocale());
externalContext.getRequestMap().put("prop", bundle);

它甚至可以作为请求范围bean的属性引用,这保证了bean的构造,即使它没有在视图中的其他位置引用。

答案 1 :(得分:0)

这正是我想要的,请参阅我的帖子https://stackoverflow.com/questions/24461307/jsf-2-external-resource-bundle

ResourceBundle bundle = ResourceBundle.getBundle("properties.common",facesContext.getViewRoot().getLocale());
externalContext.getRequestMap().put("prop", bundle);

感谢所有......