集成JSF2和Spring3(与AOP)

时间:2014-04-18 06:50:47

标签: spring jsf-2 spring-security jsf-2.2

我正在使用Spring和JSF2,并且想知道集成它们的最佳方法是什么?现在我明白基本上有两种方法可以做到这一点,但我有两个问题:

a)使用普通@ManagedBean,并使用@ManagedProperty将Spring-Services注入到bean中:问题是我不能在@ManagedBean内使用Spring-AOP,因为它不是由Spring管理的。我通常在使用自定义注释@DatabaseOperation注释的每个方法上使用arround-aspect。另一个例子是来自Spring-Security的@Secured,依此类推。我在我的项目中使用了很多AOP而不能在“顶层”使用它们对我来说是非常有限的。

b)使用SpringBeanFacesELResolver使一切由Spring管理。在专业方面,AOP的作用就像一个魅力,但缺点也很大:

  1. 没有ViewScope。我不确定我是否可以信任生产系统上的这个https://github.com/michail-nikolaev/primefaces-spring-scopes自定义视图范围实现?
  2. 无法进行序列化。它已经非常复杂了,但是一旦我使用AOP,我无法让它工作,因为org.springframework.aop.aspectj.AspectJPointcutAdvisor不是可序列化的
  3. 所以我的问题是:你如何克服这个问题?你如何整合JSF2和Spring3.x?我一直在使用可能性b)但在我的下一个项目中我需要会话复制..

    还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

两个框架的主要集成难点在于JSF通常以有状态的方式使用。为了使集成最无缝,你必须让Spring自己处理有状态和页面导航方面,而不是JSF,以及bean创建和范围。

第二个重要的集成点位于视图表达语言的级别。我们希望能够在构建视图时访问spring bean,这意味着不再需要托管bean层。

通过引入Spring webflow提供了两个框架的最佳集成,有关详细信息,请参阅here。使用SWF,JSF不再管理bean本身,这是由Spring完成的。 JSF不再管理页面导航,这在SWF流程定义中处理。

有状态也由SWF处理。流定义XML文件替换了faces-config.xml的大部分内容,用于视图导航,转换操作,bean定义等。

使用SWF JSF集成意味着faces-config.xml基本上是空的。可以在构建视图时使用直接访问spring bean的表达式语言,并且可以使用视图范围。

如果要将页面与应用程序的其余部分隔离,则可以创建具有单个视图状态和自转换的流。 SWF的一个优点是它可以通过POST-REDIRECT-GET机制防止重复的表单提交,该机制开箱即用。