在关注JSF HTTP Session Login教程之后,我尝试点击页面,它总是将我重定向到登录页面(没有css)。我尝试使用以下代码进行调试:
Enumeration<String> attributeNames = wrappedRequest.getSession().getAttributeNames();
while(attributeNames.hasMoreElements()) {
System.out.println(attributeNames.nextElement());
}
并发现我希望在
返回的班级ConnectionManager manager = (ConnectionManager) wrappedRequest.getSession()
.getAttribute("connectionManager");
没有退回。如服务器日志中所示,返回了一些其他类而不是ConnectionManager类。
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。我能知道为什么这会回来吗?
答案 0 :(得分:1)
答案基于ConnectionManager
是一个JSF托管bean。但是,基于会话中CDI特定对象的存在,看起来您正在使用CDI @Named
而不是JSF @ManagedBean
来管理bean(虽然它本身就是一件好事) 。
您只需@Inject
进入过滤器,而不是从HTTP会话中手动抓取它。
@Inject
private ConnectionManager connectionManager;