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/ 中的说明进行更改。
已将 PrimeFaces 存储库添加到 pom.xml
<repository>
<id>prime-repo</id>
<name>PrimeFaces Maven Repository</name>
<url>http://repository.primefaces.org</url>
<layout>default</layout>
</repository>
添加了对 pom.xml
中所有主题文件的依赖
<dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>all-themes</artifactId>
<version>1.0.10</version>
</dependency>
已将上下文参数添加到 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',还是用同样的样式
对于类似的问题,我尝试了一些解决方案,但没有奏效。
- 使用 jar 文件而不是 pom.xml 依赖项 - 这不会影响任何内容,因为该值首先会被忽略。
- 我的 faces-config 没有使用渲染工具包,所以 this 也没有帮助。
- 使用 h:head - 已经是这样了。
- 在 html 标签中使用 xmlns:p="http://primefaces.org/ui" 属性 - 也已经如此。
- web.xml 是 2.5 版本,所以 context-param 语法应该是有效的。
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");
}
}
对于一个大学项目,我在带有 Spring Boot 的 Maven Web 应用程序上使用骨架项目 运行ning PrimeFaces 6.2。默认情况下,此项目采用 aristo 样式。
我已尝试按照 https://www.primefaces.org/themes/ 中的说明进行更改。
已将 PrimeFaces 存储库添加到 pom.xml
<repository> <id>prime-repo</id> <name>PrimeFaces Maven Repository</name> <url>http://repository.primefaces.org</url> <layout>default</layout> </repository>
添加了对 pom.xml
中所有主题文件的依赖<dependency> <groupId>org.primefaces.themes</groupId> <artifactId>all-themes</artifactId> <version>1.0.10</version> </dependency>
已将上下文参数添加到 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',还是用同样的样式
对于类似的问题,我尝试了一些解决方案,但没有奏效。
- 使用 jar 文件而不是 pom.xml 依赖项 - 这不会影响任何内容,因为该值首先会被忽略。
- 我的 faces-config 没有使用渲染工具包,所以 this 也没有帮助。
- 使用 h:head - 已经是这样了。
- 在 html 标签中使用 xmlns:p="http://primefaces.org/ui" 属性 - 也已经如此。
- web.xml 是 2.5 版本,所以 context-param 语法应该是有效的。
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");
}
}