使用JSF作为Spring MVC的视图技术

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

Spring MVC 3支持JSF,还是简单的JSP? 我已经阅读了多个文章混合两个。

我的需要是创造一个吸引人的用户界面。 有没有一种简单的方法来使用Spring MVC与JSP作为视图技术?

我们的应用程序使用多个页面的日程安排/日历。 这基本上是一个时间pipe理APP

你犯了一个概念错误。 JSF不是一个视图技术。 JSF是一个MVC框架。 完全像Spring MVC一样,虽然他们有不同的意识形态; JSF是基于组件的MVC,而Spring MVC是基于请求的MVC。 因此他们是完全的竞争者。 你不能混合他们。 你应该select一个或另一个。 相反,JSP和Facelets是真正的视图技术。 从Java EE 6(2009年12月)开始,JSP被弃用 ,并被Facelets(XHTML)取代为JSF的默认视图技术。

您可以使用Spring MVC和JSP视图技术 。 您还可以使用Spring MVC和Facelets查看技术 (以及其他许多function )。 但是不能使用JSF组件的Spring MVC,更不能使用像PrimeFaces这样的JSF组件库。 这没有任何意义。 Spring MVC已经有了自己的<form:xxx>标签。 如果你想要的只是使用PrimeFaces相同的用户界面,只需抓住jQuery的用户界面 。 这也正是PrimeFaces所使用的内容。 PrimeFaces是一个基于jQuery的JSF组件库。

从另一方面来说,你也可以很好地将Spring IoC / DI与Spring MVC混淆了。 Spring IoC / DI 可以和JSF一起使用。 您可以通过Spring托pipebean工具( @Component和friends)来replaceJSF托pipebean工具( @ManagedBean和好友),通常只用于在JSF辅助bean中使用@Autowired 。 但就是这样。 JSF MVC框架生命周期,JSF组件和视图技术保持不变。 标准的Java EE相当于使用CDI (和EJB )。

同样的故事也适用于Spring Security。 您可以将它与JSF一起使用,但是您不应该遵循Spring Security + Spring MVC目标文档/示例来configuration它,而只能使用Spring Security + JSF。 请注意,对业务操作的Spring Security约束只有在您用Spring托pipebean工具replaceJSF托pipebean工具时才有效。 所以这仍然需要在前面的段落中描述的“在JSF中集成Spring”。 这个标准的Java EE等价物将通过web.xml <security-constraint>条目使用容器pipe理的安全性 (JAAS / JASPIC)。

同样的故事也适用于Spring WebFlow。 您还需要确保您使用的是最新版本的Spring WebFlow,因为当与多个JSF组件库一起使用时,旧版本会导致冲突 。 而且,自JSF 2.2以来,新的Faces Flowsfunction被引入作为标准Java EE API的一部分,因此基本上使Spring WebFlow成为多余。

那就是Spring Boot。 这在Java EE中没有直接的等价物。 Spring Boot基本上使您能够使用简单的Java应用程序类以main()方法“以简单和抽象的方式”执行Java EE应用程序。 如果没有Spring Boot,那肯定是可能的(否则Spring Boot将永远不会存在),但是configuration方面只需要更多的工作,因为您必须根据其文档考虑服务器特定的细节。 例如: 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和Spring MVC的经验教训,提出一个新的基于请求的MVC框架,命名为“ MVC ”,从而取代了Spring MVC,为JSF提供了一个标准的替代scheme。

也可以看看:

  • Java EE究竟是什么?
  • 请求MVC和组件MVC之间的区别
  • Java Server Faces 2.0的主要缺点是什么?
  • 当用户界面可以通过CSS,HTML,JavaScript,jQuery实现时,JSF有什么需要?
  • 什么时候使用Spring或者EJB3或者全部使用它们是必要的还是方便的?
  • Spring JSF集成:如何在JSF托pipebean中注入Spring组件/服务?
  • 为什么Facelets比JSF2.0更适合作为视图定义语言呢?

Spring MVC和JSF并没有真正的混合。 你可以使用JSF作为视图相关的东西,并让Springpipe理和连线备份(服务,daos等)。 但是试图将@Controller与JSF页面匹配并不是很好的工作(接下来是基于组件的不同的堆栈请求)。

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

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