MrS*_*n12 7 jsf spring build.gradle spring-boot
我正在尝试创建一个由 Spring boot 3.0 管理的 JSF 项目。但无论我怎么做都不起作用。我在网上找不到任何示例。
\n我的依赖项:
\nimplementation \'org.springframework.boot:spring-boot-starter-web:3.0.2\'\nimplementation \'org.apache.tomcat.embed:tomcat-embed-jasper:10.1.5\'\nimplementation \'org.glassfish:jakarta.faces:4.0.1\'\ntestImplementation \'org.springframework.boot:spring-boot-starter-test:3.0.2\'\nRun Code Online (Sandbox Code Playgroud)\n我的 MainApplication 类:
\n@SpringBootApplication\npublic class ManagementClientApplication implements ServletContextAware {\n\n public static void main(String[] args) {\n SpringApplication.run(ManagementClientApplication.class, args);\n }\n\n @Bean\n public ServletRegistrationBean<FacesServlet> servletRegistrationBean() {\n ServletRegistrationBean<FacesServlet> servletRegistrationBean = new ServletRegistrationBean<>(new FacesServlet(), "*.xhtml");\n servletRegistrationBean.setLoadOnStartup(1);\n return servletRegistrationBean;\n }\n\n @Override\n public void setServletContext(ServletContext servletContext) {\n servletContext.setInitParameter("com.sun.faces.forceLoadConfiguration", Boolean.TRUE.toString());\n servletContext.setInitParameter("jakarta.faces.FACELETS_SKIP_COMMENTS", "true");\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n我的配置 webapp/WEB-INF/faces-config.xml :
\n<?xml version="1.0" encoding="UTF-8"?>\n<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"\n xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"\n version="2.2">\n\n <application>\n <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver\n </el-resolver>\n </application>\n\n</faces-config>\nRun Code Online (Sandbox Code Playgroud)\n测试 XHTML 文件:
\n<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml"\n xmlns:h="http://xmlns.jcp.org/jsf/html">\n<h:head>\n</h:head>\n\n<h:body>\n <h:form>\n <h:outputText id="greeting" value="Hello world !" />\n </h:form>\n</h:body>\n</html>\nRun Code Online (Sandbox Code Playgroud)\n日志:
\n2023-02-02T17:21:10.844+01:00 INFO 6312 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext\n2023-02-02T17:21:10.845+01:00 INFO 6312 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 738 ms\n2023-02-02T17:21:11.133+01:00 ERROR 6312 --- [ main] jakarta.faces : Unable to obtain InjectionProvider from init time FacesContext. Does this container implement the Mojarra Injection SPI?\n2023-02-02T17:21:11.149+01:00 ERROR 6312 --- [ main] jakarta.faces : L\xe2\x80\x99application n\xe2\x80\x99a pas \xc3\xa9t\xc3\xa9 initialis\xc3\xa9e correctement au d\xc3\xa9marrage. Impossible de localiser la Fabrique : jakarta.faces.context.FacesContextFactory. Attempting to find backup.\n2023-02-02T17:21:11.150+01:00 ERROR 6312 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Servlet.init() for servlet [facesServlet] threw exception\n\njava.lang.IllegalStateException: Could not find backup for factory jakarta.faces.context.FacesContextFactory. \n at jakarta.faces.FactoryFinderInstance.notNullFactory(FactoryFinderInstance.java:497) ~[jakarta.faces-4.0.1.jar:4.0.1]\n at jakarta.faces.FactoryFinderInstance.getFactory(FactoryFinderInstance.java:190) ~[jakarta.faces-4.0.1.jar:4.0.1]\n at jakarta.faces.FactoryFinder.getFactory(FactoryFinder.java:263) ~[jakarta.faces-4.0.1.jar:4.0.1]\n at jakarta.faces.webapp.FacesServlet.acquireFacesContextFactory(FacesServlet.java:493) ~[jakarta.faces-4.0.1.jar:4.0.1]\nRun Code Online (Sandbox Code Playgroud)\n我查看过的链接:
\n如何在 Tomcat 的 Maven pom.xml 中正确配置 Jakarta EE 库?\n Spring Boot JSF 集成
\n\n我尝试重现的带有 Spring boot 2 和 Javax 的项目:
\nhttps://github.com/xtremebiker/jsf-spring-boot
\n我不明白我做错了什么。我在网上找不到任何东西。欢迎任何帮助。
\n谢谢你们
\n正如Mojarra上所写,您需要更多依赖项。
implementation group: 'org.jboss.weld.servlet', name: 'weld-servlet-shaded', version: '5.1.0.Final'
Run Code Online (Sandbox Code Playgroud)
不要自己创建 FacesServlet。ServletContainerInitializer这样做。
但如果您使用嵌入式服务器,则应该运行其中两个。因为Spring Boot 不运行初始化程序。
implementation group: 'org.jboss.weld.servlet', name: 'weld-servlet-shaded', version: '5.1.0.Final'
Run Code Online (Sandbox Code Playgroud)
@Bean
public ServletContextInitializer facesInitializer() {
return new JsfInitializer();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2855 次 |
| 最近记录: |