如何将OmniFaces与Spring Boot集成 [英] How to integrate OmniFaces with Spring Boot

查看:30
本文介绍了如何将OmniFaces与Spring Boot集成的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

推荐答案

首先,Java EE和Spring是相互竞争的框架。通常情况下,最容易的做法是选择其中一个,而不是试图将它们混合在一起。从长远来看,它将减少初学者的困惑,减少互操作性方面的烦恼。

Java EE框架面向Java EE容器(WildFly、Tomee、Payara等),而Spring框架面向基本的Servlet容器(Tomcat、Jetty等)。JSF虽然是Java EE框架的一部分,但最初不需要太多其他Java EE构件作为依赖项,因此它也可以毫不费力地在基本的Servlet容器中运行。只需要JSTL作为Java EE的另一部分,在基本的Servlet容器中手动安装JSTL相当简单。

从JSF 2.0版开始,添加了可选的Bean验证(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针对的是JSF2.0,不需要CDI。OmniFaces 1.1x甚至没有CDI。OmniFaces 2.x针对的是JSF2.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应用程序中使用JSF。

它自动配置PrimeFaces、PrimeFaces扩展、BootsFaces、ButterFaces、RichFaces、OmniFaces、AngularFaces、Mojarra和MyFaces库,以在嵌入式Tomcat、Jetty或Undertow Servlet容器上运行。

虽然我不喜欢Spring,也无法根据自己的经验判断,但我想说,如果您想继续使用Spring Boot+JSF,JoinFaces是您的最佳选择。

请注意,虽然JoinFaces站点声称它支持CDI批注,但这并不意味着它支持CDI实现,它实际上只支持javax.inject.*包中的批注

另请参阅:

这篇关于如何将OmniFaces与Spring Boot集成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆