将FacesContext注入spring bean

时间:2010-12-23 00:26:15

标签: java spring jsf

我最近将bean从托管bean转换为spring-bean。

一切都很好,直到某个时候调用以下方法:

Exception e = (Exception) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(
                    AbstractProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY);

此时事情爆发,因为FacesContext.getCurrentInstance()返回null。

是否可以将faces上下文注入我的bean?

2 个答案:

答案 0 :(得分:7)

我今天遇到了同样的问题,所以我想发布这个答案以供将来参考。

可以使用以下方式注入FacesContext:

@ManagedProperty("#{facesContext}")
FacesContext faces;

它也适用于spring bean,只要Spring和JSF在应用程序中正确集成。

参考:

Integrating Spring and JSF

Injecting FacesContext

答案 1 :(得分:6)

  

是否可以将faces上下文注入我的bean?

不确定,但在这种特殊情况下不需要它。 ExternalContext#getSessionMap()基本上是HttpSession属性的外观。至此,您只需要以某种方式获取Spring bean中的HttpServletRequest,然后通过HttpServletRequest#getSession()从中获取HttpSession。然后,您可以通过HttpSession#getAttribute()访问会话属性。

我不做春天,但是Google告诉我你可以按照以下方式获得它:

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

完成后,你可以这样做:

Exception e = (Exception) request.getSession().getAttribute(AbstractProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY);