我已经找到了一些关于将JSF技术与Spring集成的教程,但是让OmniFaces使用Spring似乎是一项相当复杂的工作。把这两者结合在一起是个好主意吗?
发布于 2017-01-02 00:10:25
首先,Java和Spring是相互竞争的框架。一般来说,选择一个或另一个是最容易的,而不是试图混合它们。从长远来看,这将减少初学者的困惑,减少互操作性方面的烦恼。
Java框架面向Java容器(WildFly、TomEE、Payara等),而Spring框架面向赤骨servlet容器(Tomcat、Jetty等)。JSF虽然是Java框架的一部分,但最初并不需要太多其他Java工件作为依赖项,这样它也可以轻松地在简单的servlet容器中运行。只有JSTL是Java的另一部分,手动安装在一个简单的servlet容器中非常简单。
从JSF2.0版本开始,添加了一个可选Bean验证(JSR303)依赖项,它也很容易安装在一个简单的servlet容器中。
由于JSF版本2.2,添加了一个可选的CDI依赖项,这对于Weld来说也很容易安装在一个简单的servlet容器中。然而,麻烦来了: Spring只部分支持CDI。支持来自javax.inject.*
的任何内容,但不支持来自javax.enterprise.context.*
的任何内容。这迫使用户少或更多地使用Spring管理的bean,而不是CDI管理的bean。
根据未来的JSFVersion2.3,JSF自己的@ManagedBean
工具将被废弃,CDI依赖将被要求,并将添加更多的可选Java依赖项: WebSocket (JSR356)和JSONP (JSR353)。完全需要CDI并不能很好地配合Spring,因为他们拒绝完全实现CDI。
反过来,OmniFaces完全面向JSF。OmniFaces 1.x是针对JSF2.0的,不需要CDI。OmniFaces 1.1x甚至没有CDI。OmniFaces 2.x是针对JSF2.2的,其不同之处在于CDI是必需的,而不是可选的。之所以这样做,是因为OmniFaces的设计考虑了“最佳实践”,并试图迫使用户迁移到CDI进行bean管理,特别是因为JSF本身也将朝着使CDI成为必需的方向前进,因此OmniFaces 2.x用户将更好地为未来做好准备。
考虑到上面解释的CDI问题,您现在可能已经意识到,如果您想要使用Spring而不是Java,最好选择不含CDI的OmniFaces 1.1x。最新的1.1x版本是1.14,这恰好集成为JoinFaces的一部分。
JoinFaces是什么? 这个项目使JSF能够在JAR打包的中使用。 它会自动配置PrimeFaces、PrimeFaces扩展、BootsFaces、ButterFaces、RichFaces、OmniFaces、AngularFaces、Mojarra和MyFaces库,以便在嵌入式Tomcat、Jetty或Undertow容器上运行。
虽然我不是Spring的人,也无法从自己的经验中判断,但我认为JoinFaces是您最好的选择,以防您想继续使用Spring + JSF。
请注意,虽然JoinFaces站点表示支持CDI注释,但这并不意味着它支持CDI实现,它实际上只支持来自javax.inject.*
包的注释。
另请参阅:
https://stackoverflow.com/questions/41416546
复制