我正在开发一个使用JSF和Spring混合的项目。用户界面端点通过JSF前端控制器(javax.faces.webapp.FacesServlet)访问,而REST服务调用则通过Spring前端控制器(org.springframework.web.servlet.DispatcherServlet).访问。更深的层是Spring管理的(或多或少)。我不喜欢这种安排,但我不能改变它。
问题是Spring的请求作用域bean在处理通过JSF前端控制器传入的请求时没有初始化。是否有现成的解决方案来将Spring的WebApplicationContext与JSF机器集成,以便为每个请求初始化Spring请求范围内的bean,而不管该请求是通过JSF还是servlet完成的?
发布于 2014-02-13 18:58:30
有两种方法可以将JSF与Spring集成在一起,这取决于您希望提供最多控制权的框架:
JSF前端控制器:的一种方法是通过JSF路由所有请求,并让将它们路由到控制器,让JSF通过faces-config管理导航状态。然后,将spring注入JSF托管bean,并通过SpringBeanFacesELResolver使用值表达式从facelets视图中访问spring。
关于工作实例,请看这篇文章。
Spring前端控制器:将spring作为带有dispatcher servlet的前端控制器,并放置spring。这是集成这两个框架的首选和最强大的方法,请参阅文档的本节。
Spring将管理导航状态,faces配置文件大部分是空的。不需要JSF托管bean层,请求由webflow直接处理。
JSF按钮中的操作直接触发webflow转换,spring也可以在值表达式中用于构建视图。使用此解决方案,与Spring的集成更加无缝,因为webflow提供了比JSF导航机制更多的可能性:在转换之间触发bean方法,为了避免双重提交,post重定向get模式。
使用这个方向解决了spring请求作用域bean的初始化问题,另外一个解决方法是向RequestContextListener或RequestContextFilter中添加web.xml (参见3.4.4.1文件部分)。
https://stackoverflow.com/questions/21755908
复制相似问题