Java JSF:如何根据特定FacesContext会话属性的值将用户重定向到另一个页面

Java JSF:如何根据特定FacesContext会话属性的值将用户重定向到另一个页面,java,session,jsf,redirect,servlet-listeners,servlet-filters,Java,Session,Jsf,Redirect,Servlet Listeners,Servlet Filters,在我的JSF应用程序中,如果userRole等会话属性的值为“contributor”,我需要将用户从页面A重定向到页面B,如果是“author”,则重定向到页面C 我被告知我必须实现一个页面侦听器,或者可能是一个会话侦听器。虽然我知道编写侦听器类非常简单和标准,但我不知道如何在JSF页面本身上设置它(以侦听会话) 有人吗?会话侦听器()不合适,因为它没有对当前HTTP请求/响应的引用,而当前HTTP请求/响应是更改请求/响应目标所必需的 使用过滤器。要了解有关筛选器的更多信息,请查看我们的。注

在我的JSF应用程序中,如果userRole等会话属性的值为“contributor”,我需要将用户从页面A重定向到页面B,如果是“author”,则重定向到页面C

我被告知我必须实现一个页面侦听器,或者可能是一个会话侦听器。虽然我知道编写侦听器类非常简单和标准,但我不知道如何在JSF页面本身上设置它(以侦听会话)

有人吗?

会话侦听器()不合适,因为它没有对当前HTTP请求/响应的引用,而当前HTTP请求/响应是更改请求/响应目标所必需的

使用过滤器。要了解有关筛选器的更多信息,请查看我们的。注意,会话范围的JSF托管bean本身存储为
HttpSession
属性,托管bean名称作为键。您可以在
doFilter()
方法中访问它们,如下所示:

Bean bean = (Bean) ((HttpServletRequest) request).getSession().getAttribute("bean");
或者,当需要根据POST操作确定时,只需在托管bean操作方法中返回不同的结果。然后使用(隐式)JSF导航。伪:

public String submit() {
    if (user is contributor) return "pageB";
    if (user is author) return "pageC";
    return "pageA";
}
会话侦听器()不合适,因为它没有对当前HTTP请求/响应的引用,而当前HTTP请求/响应是更改请求/响应目标所必需的

使用过滤器。要了解有关筛选器的更多信息,请查看我们的。注意,会话范围的JSF托管bean本身存储为
HttpSession
属性,托管bean名称作为键。您可以在
doFilter()
方法中访问它们,如下所示:

Bean bean = (Bean) ((HttpServletRequest) request).getSession().getAttribute("bean");
或者,当需要根据POST操作确定时,只需在托管bean操作方法中返回不同的结果。然后使用(隐式)JSF导航。伪:

public String submit() {
    if (user is contributor) return "pageB";
    if (user is author) return "pageC";
    return "pageA";
}

谢谢你的建议,谢谢你一直在我们身边。您的建议是否也适用于“倾听”会话超时?不客气。您可以使用
HttpSessionListener
HttpSessionBindingListener
,具体取决于您的唯一要求。感谢您的建议,感谢您一直为我们服务。您的建议是否也适用于“倾听”会话超时?不客气。根据唯一的要求,您可以使用
HttpSessionListener
httpsessionbindingstener
for。