如何将OmniFaces与Spring Boot集成

时间:2017-01-01 15:27:55

标签: jsf spring-boot integration omnifaces

我已经找到了一些关于将JSF技术与Spring Boot集成的教程,但是让OmniFaces使用Spring Boot似乎是一项相当复杂的工作。将这两者结合在一起是不是一个好主意?

1 个答案:

答案 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。

反过来,OmniFaces完全适合JSF。 OmniFaces 1.x针对JSF 2.0,不需要CDI。 OmniFaces 1.1x甚至可以降低CDI。 OmniFaces 2.x针对的是JSF 2.2,区别在于CDI是必需的,而不是可选的。这样做是因为OmniFaces的设计考虑了“最佳实践”,并试图强迫用户转向CDI进行bean管理,特别是因为JSF本身也会朝着制作CDI的方向前进,因此OmniFaces 2.x用户将为未来做好更充分的准备。

鉴于上面解释的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.*包中的注释

另见: