我已经找到了一些关于将JSF技术与Spring Boot集成的教程,但是让OmniFaces使用Spring Boot似乎是一项相当复杂的工作。将这两者结合在一起是不是一个好主意?
答案 0 :(得分:14)
首先,Java EE和Spring是竞争框架。通常,最容易选择其中一个而不是尝试混合它们。从长远来看,它最初会减少对初学者的混淆,减少对互操作性的烦恼。
Java EE框架面向Java EE容器(WildFly,TomEE,Payara等),而Spring框架面向准系统servlet容器(Tomcat,Jetty等)。 JSF虽然是Java EE框架的一部分,但最初并不需要太多其他Java EE工件作为依赖,因此它也可以毫不费力地在准系统servlet容器中运行。只需要JSTL作为Java EE的另一部分,这在手动安装在准系统servlet容器中是相当简单的。
自JSF 2.0版以来,添加了一个可选的Bean Validation(JSR303)依赖项,它也很容易安装在准系统servlet容器中。
从JSF 2.2版开始,添加了一个可选的CDI依赖项,在Weld的情况下也很容易安装在准系统servlet容器中。但是,遇到麻烦:Spring只部分支持CDI。支持来自javax.inject.*
的任何内容,但不支持来自javax.enterprise.context.*
的任何内容。这迫使用户使用Spring管理的bean而不是CDI管理的bean。
根据未来的JSF版本2.3,不推荐使用JSF自己的@ManagedBean
工具,需要CDI依赖,并且将添加更多可选的Java EE依赖项:WebSocket(JSR356)和JSONP(JSR353)。完全被要求的CDI与Spring一起玩得不好,因为他们拒绝全面实施CDI。
鉴于上面解释的CDI问题,您现在应该意识到,如果您想使用Spring而不是Java EE,您最好选择无CDI的OmniFaces 1.1x。最新的1.1x版本是1.14,这恰好是JoinFaces的一部分。
什么是JoinFaces?
该项目在JAR打包的Spring Boot Application中启用了JSF。
它可以自动配置PrimeFaces,PrimeFaces Extensions,BootsFaces,ButterFaces,RichFaces,OmniFaces,AngularFaces,Mojarra和MyFaces库,以便在嵌入式Tomcat,Jetty或Undertow servlet容器中运行。
虽然我不是春天的人,也不能从自己的经验来看,但我会说JoinFaces是你最好的选择,以防你想继续使用Spring Boot + JSF。
请注意,虽然JoinFaces网站表示它支持CDI注释,但这并不意味着它支持CDI实现,它实际上只支持javax.inject.*
包中的注释。