0

我正在使用 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”。

然后重定向到页面。

为什么?我认为它必须首先重定向到页面。

4

1 回答 1

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。

有关的:

于 2012-05-11T11:34:52.510 回答