我的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将使用它而不是自动创建一个。