【问题标题】:PrimeFaces: how to make the theme dynamicPrimeFaces:如何使主题动态化
【发布时间】:2013-09-15 04:06:41
【问题描述】:

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

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

请指导我,提前谢谢。

【问题讨论】:

    标签: jsf jsf-2 primefaces


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我也有类似的问题。请告诉我如何正确传递 EL 表达式。应用程序加载时出现此错误:“加载主题时出错,找不到“primefaces-[Ljava.lang.String;@6add1c32”库的“theme.css”资源”
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      相关资源
      最近更新 更多