如何在页面显示之前用条件导航逻辑设计JSF入口点页面



我的JSF应用程序的入口点是EntryPoint.jsp。我们正在使用JSF 1.2。用户可以使用多个不同的URL参数调用EntryPoint.jsp。我想解析这些参数,加载具有某些状态的会话bean,在页面加载之前执行所有这些操作,然后继续处理/显示EntryPoint.jsp或转发/重定向到应用程序中的另一个页面。有谁能推荐最好的设计吗?

我已经尝试在我的EntryPoint.java支持bean(异常处理删除):

@PostConstruct
public void init() {
    HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    companyName = request.getParameter("companyCode");
    //process parameters...
    if (someCondition) {
        FacesContext.getCurrentInstance().getExternalContext().dispatch("/other.jsp");
        return;
    }
 }

但是我得到了一个IllegalStateException: Response already committed

我也试过

FacesContext.getCurrentInstance().getExternalContext().redirect("/other.jsp");

,但也得到一个IllegalStateException(没有消息)。很明显,这不是做这件事的合适方式和地点。谁能推荐一个更好的方法来实现我正在寻找什么?

这篇文章似乎建议servlet过滤器可能是一个不错的选择。如果是,会话范围JSF支持bean在servlet过滤器中可用吗?

这对于JSF 1.x确实不起作用。正如你在另一个问题中发现的那样,Filter确实是一个更适合这项工作的地方。这个答案从那时起就没有改变过。会话作用域的JSF托管bean存储在HttpSession中,托管bean名称作为会话属性名称。是的,它可以在Filter中访问。甚至,Filter可以预先创建它并将其放入会话中。然后JSF将使用它而不是自动创建一个。

相关内容

  • 没有找到相关文章

最新更新