我正在使用Spring和JSF2,并且想知道集成它们的最佳方法是什么?现在我明白基本上有两种方法可以做到这一点,但我有两个问题:
a)使用普通@ManagedBean
,并使用@ManagedProperty
将Spring-Services注入到bean中:问题是我不能在@ManagedBean
内使用Spring-AOP,因为它不是由Spring管理的。我通常在使用自定义注释@DatabaseOperation
注释的每个方法上使用arround-aspect。另一个例子是来自Spring-Security的@Secured
,依此类推。我在我的项目中使用了很多AOP而不能在“顶层”使用它们对我来说是非常有限的。
b)使用SpringBeanFacesELResolver
使一切由Spring管理。在专业方面,AOP的作用就像一个魅力,但缺点也很大:
org.springframework.aop.aspectj.AspectJPointcutAdvisor
不是可序列化的所以我的问题是:你如何克服这个问题?你如何整合JSF2和Spring3.x?我一直在使用可能性b)但在我的下一个项目中我需要会话复制..
还有其他建议吗?
答案 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机制防止重复的表单提交,该机制开箱即用。