PrimeFaces:如何使主题动态化

azu*_*ury 1 jsf primefaces jsf-2

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

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

<context-param>
    <param-name>primefaces.THEME</param-name>
    <param-value>#{loggedInUser.preferences.theme}</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

以我的理解,主题将由不同的用户更改,对吗?即使我根据用户的喜好更改了主题,也无需重新启动中间件,主题会立即更改,对吗?

请指导我,谢谢。

Bal*_*usC 5

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

String themeExpression = "#{loggedInUser.preferences.theme}";
Run Code Online (Sandbox Code Playgroud)

然后,PrimeFaces在每个HTTP请求上以编程方式评估它,如下所示,以获取实际值:

String theme = context.getApplication().evaluateExpressionGet(context, themeExpression, String.class);
Run Code Online (Sandbox Code Playgroud)

实际上,它是请求范围的,而不是您所期望的应用程序的范围。但是,评估的属性又可以是会话作用域Bean的属性。