PrimeFaces:如何使主题动态化

时间:2013-09-15 04:06:42

标签: jsf jsf-2 primefaces

我需要让不同的用户使主题动态化,目前,我在http://www.developer.am/primefaces/?page=Applying%20a%20Theme

中找到指南

它说: 如果您想使主题动态化,请将EL表达式定义为参数值。

<context-param>
    <param-name>primefaces.THEME</param-name>
    <param-value>#{loggedInUser.preferences.theme}</param-value>
</context-param>

据我了解,主题会被不同的用户改变,对吧?即使我在用户偏好中更改主题,我也无需重启中间件,主题会立即更改,对吧?

请提前指导我。

2 个答案:

答案 0 :(得分:4)

您似乎期望在解析web.xml时评估EL表达式。这不是真的。相反,所有PrimeFaces从web.xml init参数获得的是String,表示EL表达式,如下所示:

String themeExpression = "#{loggedInUser.preferences.theme}";

然后,PrimeFaces以编程方式对每个HTTP请求进行评估,如下所示,以获得实际值:

String theme = context.getApplication().evaluateExpressionGet(context, themeExpression, String.class);

在效果中,它的请求作用域,而不是您期望的应用程序作用域。但是,evaluate属性又可以只是会话范围bean的属性。

答案 1 :(得分:1)

是。您只需要一个将用户的主题名称作为字符串返回的bean。