我目前正在实现一个小型Spring MVC PoC,并且我希望使用JSF作为视图技术,因为我公司中的大多数人都习惯于带有Primefaces环境的J2EE。

Spring MVC 3是否支持JSF或仅仅是JSP?我已经阅读了多篇文章,将两者结合在一起。

我需要创建一个吸引人的UI。使用Spring MVC和JSP作为视图技术,有没有一种简单的方法?

我们的应用程序在多个页面中使用日程表/日历。这基本上是一个时间管理应用程序

#1 楼

您正在犯一个概念上的错误。 JSF不是视图技术。 JSF是一个MVC框架。就像Spring MVC一样,尽管两者都有不同的意识形态。 JSF是基于组件的MVC,而Spring MVC是基于请求的MVC。因此,他们是完全的竞争对手。您不能混合它们。您应该选择一个。相反,JSP和Facelets是真正的视图技术。从Java EE 6(2009年12月)开始,JSP被弃用,并由Facelets(XHTML)取代,作为JSF的默认视图技术。

您可以将Spring MVC与JSP视图技术一起使用。您还可以将Spring MVC与Facelets视图技术一起使用(以及许多其他功能)。但是您不能将Spring MVC与JSF组件一起使用,更不能与诸如PrimeFaces之类的JSF组件库一起使用。 JSF输出组件可能起作用,但是JSF输入组件根本不起作用。 Spring MVC已经有自己的<form:xxx>标签用于输入。即使将它们混合使用,也将在混杂的代码库中最终获得两个框架的一半功能。这没有任何意义。如果您只想使用与PrimeFaces相同的UI,则只需抓取jQuery UI。这也正是PrimeFaces在后台使用的功能。 PrimeFaces是基于jQuery的JSF组件库。另一方面,将Spring IoC / DI与Spring MVC混淆也很好。 Spring IoC / DI可以与JSF一起使用。您可以用Spring托管bean设施(@ManagedBean和朋友)替换JSF托管bean设施(@Component和朋友),通常仅是为了在JSF支持bean中使用@Autowired。就是这样。 JSF MVC框架的生命周期,JSF组件和视图技术保持不变。与之等效的标准Java EE将使用CDI(和EJB)。

同样的情况适用于Spring Security。您可以将其与JSF一起使用,但是,为了配置它,您不应该遵循Spring Security + Spring MVC目标的文档/示例来进行配置,而只能遵循Spring Security + JSF的文档/示例。请注意,仅当您用Spring托管Bean设施替换JSF托管Bean设施时,对业务操作的Spring Security约束才起作用。因此,仍然需要如上一段所述的“在JSF中集成Spring”。与此等效的标准Java EE将通过<security-constraint>中的web.xml条目使用容器管理的安全性(JAAS / JASPIC)。

同样的情况也适用于Spring WebFlow。您还需要确保使用的是Spring WebFlow的最新版本,因为较早的版本与多个JSF组件库一起使用时会引起冲突。此外,从JSF 2.2开始,作为标准Java EE API的一部分引入了新的Faces Flows功能,从而基本上使Spring WebFlow变得多余。

然后是Spring Boot。在Java EE中没有直接等效项。 Spring Boot基本上使您能够使用普通的Java应用程序类和main()方法“以一种简单而抽象的方式”执行Java EE应用程序。如果没有Spring Boot,这肯定是有可能的(否则,Spring Boot将永远不存在),因为您必须根据其文档考虑服务器特定的细节,因此配置方面的工作只会更多。例如:Undertow和Jetty。

回到JSF和Spring MVC,如果确实需要,您可以在同一Web应用程序中安全地彼此相邻运行Spring MVC和JSF,但是它们不会在服务器端互操作。它们将完全独立运行。如果JSF生成的HTML页面中的某些JavaScript恰巧在同一Web应用程序中调用基于Spring的REST Web服务调用,则它们最多将在客户端彼此接触。但是,该Spring Web服务于是不需要/不必了解有关JSF的任何信息即可做出相应的响应。相当于Spring REST Web服务的标准Java EE是JAX-RS。

即将发布的Java EE 8将基于两个JSF的经验教训,提供一个基于请求的新MVC框架,命名为“ MVC”。和Spring MVC,从而取代了Spring MVC并提供了JSF的标准替代方案。

另请参见:


Java EE到底是什么?
差异在请求MVC和组件MVC之间
当可以通过CSS,HTML,JavaScript,jQuery实现UI时,Java Server Faces 2.0的主要缺点是什么?
JSF的需求是什么?

Spring JSF集成:如何在JSF托管bean中注入Spring组件/服务?
为什么Facelets比JSP更受青睐?从JSF2.0开始查看定义语言?


评论


过去,我将JSF与Primefaces一起使用。我读了几篇文章,两者兼而有之。我需要的是一种快速且干净的方法来拥有具有良好UI的应用程序。您会选择在jQuery中使用facelets还是使用组件库并从Spring MVC转到JSF?

–宇航员
2013年9月11日16:07

对不起,我不能。我对你一无所知。只需选择一个您认为/感觉最适合您自己的知识,具体的功能要求以及时间空间/期限等即可。如果是我,我会选择JSF并在一周内准备就绪。出于非常简单的原因,因为我从未真正使用过Spring + Spring MVC,因此正确学习/掌握它可能需要几个月的时间。您的情况当然不同。您不能向别人问一个个人/主观问题,您可以自己回答最好的问题。顺便说一句,堆栈溢出是寻求意见的错误位置。

– BalusC
2013年9月11日16:10



确实,只是试图获得专家意见。我仅在过去使用过JSF,并且我认为将来我将继续使用它,并放弃使用Spring MVC。我只是没有时间学习它,相反,我将使用JSF,但是我的经验也很有限,只有几个月,只有一个很小的项目。

–宇航员
2013年9月11日17:55

@BalusC它需要一整天的时间来阅读所有链接(盗用)的完整答案。但这消除了所有疑问。非常感谢!!

– Hiren
16年5月28日在7:00

哇,这篇文章消除了Spring + JSF组合以及许多其他方式带来的疑问!谢谢。

– Khuzi
19-2-17在21:00



#2 楼

Spring MVC和JSF并没有真正融合在一起。您可以使用JSF来查看与视图相关的内容,并让Spring管理和连接支持的东西(服务,Dao等)。但是,尝试将@Controllers与JSF页面进行匹配并不是一件好事(此外,两者都是基于组件的不同堆栈请求)。

要将Spring与JSF集成,您需要将SpringBeanFacesELResolver添加到faces-config.xml中。这将从Springs应用程序上下文中查找bean。为此,您必须使用普通的JSF批注,而不是基于CDI的批注。

评论


我的想法基于本文itcuties.com/j2ee/jsf-2-spring-3-example-the-registration-app,但是我之所以使用JSF的唯一原因是因为它是像Primefaces这样的组件库,我可以使用纯Spring MVC做同样的事情吗?

–宇航员
2013年9月11日15:22

查找一些JavaScript库,并为日历创建一些客户端组件。但是如前所述,您仍然可以在Spring之上使用JSF,但是不能拥有Spring MVC。

– Deinum M.
2013年9月11日15:25

的确,我在混淆这两个概念。感谢您的回复!

–宇航员
2013年9月12日上午9:38

#3 楼

Spring Webflow在这里可以提供帮助。看看这个示例项目。
https://github.com/spring-projects/spring-webflow-samples/tree/master/primefaces-showcase

评论


您向后提出了问题。而且,JSF 2.2已经为此目的提供了@FlowScoped。

– BalusC
2015年9月4日在9:49