会话范围内的托管 bean 不能用作过滤器中的会话属性
Session scoped managed bean not available as session attribute in filter
遵循 教程后,我尝试点击页面,它总是将我重定向到登录页面(没有 css)。我尝试使用以下代码进行调试:
Enumeration<String> attributeNames = wrappedRequest.getSession().getAttributeNames();
while(attributeNames.hasMoreElements()) {
System.out.println(attributeNames.nextElement());
}
发现 class 我预计 return 在
ConnectionManager manager = (ConnectionManager) wrappedRequest.getSession()
.getAttribute("connectionManager");
未 return 编辑。如服务器日志中所示,class 编辑了其他一些 class 而不是 ConnectionManager class。
Info: employeeManager
Info: org.jboss.weld.context.beanstore.http.LockStore
Info: com.sun.faces.renderkit.ServerSideStateHelper.LogicalViewMap
Info: org.jboss.weld.context.conversation.ConversationIdGenerator
Info: org.jboss.weld.context.ConversationContext.conversations
Info: javax.faces.request.charset
EmployeeManager 是另一个托管 bean。我能知道为什么这是 return 吗?
该答案基于 ConnectionManager
是 JSF 托管 bean。但是,基于会话中特定于 CDI 的对象的存在,看起来您正在使用 CDI @Named
而不是 JSF @ManagedBean
来管理 bean(尽管这本身就是一件好事) .
您可以 @Inject
将它放入过滤器中,而不是手动从 HTTP 会话中获取它。
@Inject
private ConnectionManager connectionManager;
另请参阅:
- Get JSF managed bean by name in any Servlet related class
- Backing beans (@ManagedBean) or CDI Beans (@Named)?
遵循 教程后,我尝试点击页面,它总是将我重定向到登录页面(没有 css)。我尝试使用以下代码进行调试:
Enumeration<String> attributeNames = wrappedRequest.getSession().getAttributeNames();
while(attributeNames.hasMoreElements()) {
System.out.println(attributeNames.nextElement());
}
发现 class 我预计 return 在
ConnectionManager manager = (ConnectionManager) wrappedRequest.getSession()
.getAttribute("connectionManager");
未 return 编辑。如服务器日志中所示,class 编辑了其他一些 class 而不是 ConnectionManager class。
Info: employeeManager
Info: org.jboss.weld.context.beanstore.http.LockStore
Info: com.sun.faces.renderkit.ServerSideStateHelper.LogicalViewMap
Info: org.jboss.weld.context.conversation.ConversationIdGenerator
Info: org.jboss.weld.context.ConversationContext.conversations
Info: javax.faces.request.charset
EmployeeManager 是另一个托管 bean。我能知道为什么这是 return 吗?
该答案基于 ConnectionManager
是 JSF 托管 bean。但是,基于会话中特定于 CDI 的对象的存在,看起来您正在使用 CDI @Named
而不是 JSF @ManagedBean
来管理 bean(尽管这本身就是一件好事) .
您可以 @Inject
将它放入过滤器中,而不是手动从 HTTP 会话中获取它。
@Inject
private ConnectionManager connectionManager;
另请参阅:
- Get JSF managed bean by name in any Servlet related class
- Backing beans (@ManagedBean) or CDI Beans (@Named)?