我正在使用jsf 2.0
我对PreRenderView有疑问。
在我的Bean中我有像
这样的方法public void init() throws Exception
{
FacesContext.getCurrentInstance().getExternalContext().redirect("/To My Page");
if(!FacesContext.getCurrentInstance().isPostback())
{
System.out.println("Kshitij");
}
}
执行此方法时,它还会在servler日志中打印“Kshitij”。
然后重定向到页面。
为什么呢?我认为它必须首先重定向到页面。
答案 0 :(得分:1)
为什么您认为实际重定向是先执行的?在服务器可以继续控制请求/响应之前,该方法必须先完成运行。暂停代码执行,然后在全新请求和线程中的完全相同的位置继续执行代码是不可能的。
redirect()
调用基本上设置了Location
响应标头。只有当方法返回时,服务器才会发送响应,然后浏览器将在该位置发送新请求。
如果您想在需要重定向时跳过打印,请添加一个return语句或if / else。
if (youNeedToRedirect) {
FacesContext.getCurrentInstance().getExternalContext().redirect("/To My Page");
}
else {
if (!FacesContext.getCurrentInstance().isPostback()) {
System.out.println("Kshitij");
}
}
这一切都与JSF或preRenderView
无关。它只是基本的Java和HTTP。