1

我需要让不同用户的主题动态化,目前,我在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>

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

请指导我,提前谢谢。

4

2 回答 2

5

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

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

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

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

实际上,它是请求范围,而不是您似乎期望的应用范围。然而,评估的属性又可以只是会话范围 bean 的属性。

于 2013-09-15T16:34:14.667 回答
1

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

于 2013-09-15T13:29:17.327 回答