primefaces.THEME 值在 web.xml 中被忽略

primefaces.THEME value gets ignored in web.xml

对于一个大学项目,我在带有 Spring Boot 的 Maven Web 应用程序上使用骨架项目 运行ning PrimeFaces 6.2。默认情况下,此项目采用 aristo 样式。

我已尝试按照 https://www.primefaces.org/themes/ 中的说明进行更改。

  1. 已将 PrimeFaces 存储库添加到 pom.xml

    <repository>
        <id>prime-repo</id>
        <name>PrimeFaces Maven Repository</name>
        <url>http://repository.primefaces.org</url>
        <layout>default</layout>
    </repository>
    
  2. 添加了对 pom.xml

    中所有主题文件的依赖
    <dependency>
        <groupId>org.primefaces.themes</groupId>
        <artifactId>all-themes</artifactId>
        <version>1.0.10</version>
    </dependency>
    
  3. 已将上下文参数添加到 src/main/webapp/WEB-INF/web。xml

    <context-param>
        <param-name>primefaces.THEME</param-name>
        <param-value>cruze</param-value>
    </context-param>

然而,web.xml 处的值被完全忽略。使用此 web.xml 中的其他值,但是无论我在 primefaces.THEME 参数中放入什么,都不会使用它。程序甚至可以接受完全随机的值,并且 运行 就好了。同放'none',还是用同样的样式

对于类似的问题,我尝试了一些解决方案,但没有奏效。

PrimeFaces 是否有可能在 web.xml 以外的其他地方期待主题?

补充:我的问题和描述的一样here。我很确定它使用的是相同的框架项目,除了较新的 PrimeFaces 版本。

完整 web.xml 文件(使用不同的 primefaces.THEME 值进行测试)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <error-page>
        <exception-type>org.springframework.security.access.AccessDeniedException</exception-type>
        <location>/error/access_denied.xhtml</location>
    </error-page>


    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>primefaces.THEME</param-name>
        <param-value>none</param-value>
    </context-param>

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>login.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

似乎 Spring 通常 influences/ignores/... 来自 web.xml 的上下文参数。下面的解决方案感觉更像是一种解决方法,因为 #{facesContext.externalContext.getInitParameter('primefaces.THEME')} 的空输出非常清楚地表明参数没有从 web.xml 传递,我创建了一个在启动时传递参数的 ServletContextInitializer。

@Configuration
public class CustomServletContextInitializer implements ServletContextInitializer {

    @Override
    public void onStartup(ServletContext sc) throws ServletException {
        sc.setInitParameter("primefaces.THEME", "cruze");
    }

}