我有一个bean,我最近从一个托管bean转变为一个spring-bean.
一切都很好,直到某个时候调用以下方法:
Exception e = (Exception) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(
AbstractProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY);
Run Code Online (Sandbox Code Playgroud)
在这一点上事情爆发,因为FacesContext.getCurrentInstance()返回null.
是否可以将faces上下文注入我的bean?
我今天遇到了完全相同的问题,所以我想发布这个答案以供将来参考.
可以使用以下方式注入FacesContext:
@ManagedProperty("#{facesContext}")
FacesContext faces;
Run Code Online (Sandbox Code Playgroud)
如果Spring和JSF在应用程序中正确集成,它也适用于spring bean.
参考:
是否可以将faces上下文注入我的bean?
不确定,但在这种特殊情况下,它不需要.该ExternalContext#getSessionMap()基本上是一个门面的属性HttpSession.到了这一步,你只需要以HttpServletRequest某种方式抓住你的Spring bean,然后从中获取HttpSession它HttpServletRequest#getSession().然后,您可以通过访问会话属性HttpSession#getAttribute().
我不做Spring,但Google告诉我你可以按如下方式获得它:
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Run Code Online (Sandbox Code Playgroud)
完成后,您可以这样做:
Exception e = (Exception) request.getSession().getAttribute(AbstractProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5100 次 |
| 最近记录: |