我正在使用JSF 1.2
+ RichFaces
系统。这个系统是一种博客。用户可以创建自己的博客并进行管理。可通过以下网址访问博客:
www.meublog.com/NameOfBlog
我使用会话范围的单Managed Bean
来进行所有控制。当用户访问博客时,我使用通过URL的过滤器,该过滤器识别出正在访问的博客,将博客的ID
放入会话中并向博客索引提供支持。
我使用此会话ManagedBean
来控制博客视图中的所有内容。
问题是浏览器在多个选项卡之间共享相同的会话。当用户在一个选项卡上访问此www.meublog.com/julio
的博客而在另一个选项卡中访问www.meublog.com/fulano
时,我无法识别这两个博客,因为我只建立了一个会话。
我想知道是否有人知道在这里遵循正确的道路......
答案 0 :(得分:1)
您不应将请求作用域信息存储在会话范围中,原因完全在于您所面临的原因。使用请求范围的托管bean,而不是根据请求URI初始化。您可以通过ExternalContext
和/或HttpServletRequest
获取大部分请求详细信息。
,例如,在bean的构造函数或@PostConstruct
方法中:
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
// If you use suffix mapping like *.jsf
String servletPath = ec.getRequestServletPath();
// Or if you use prefix mapping like /faces/*
String pathInfo = ec.getRequestPathInfo();
// Now initialize based on the value of either servletPath or pathInfo.