7

我觉得这将是一个最短答案的问题:“这就是 JSF 取代 JSP 的原因”,但我会继续问它。

问题:我想知道:我能否获得 JSF 页面的 Response 对象(如果有的话)?

为什么想知道?:我发现自己处于需要从 JSF 页面传递到 JSP 页面的情况,所以我想为什么不response.sendRedirect从从 JSF 页面调用的 bean 重定向(使用 )然后......你可以看到在哪里它的标题。

我觉得这可以以更清洁的方式完成,但看不到如何!

编辑:同时,我还会询问哪种方式最适合从重定向到 JSF 页面。

提前感谢您的建议。

4

2 回答 2

10

好吧,如果你想得到这个response对象,你可以JSF像下面这样把它放进去!

HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();

但是您实际上并不需要response仅将对象重定向到JSF. 这可以通过以下方式更轻松地完成:

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
externalContext.redirect("http://www.example.com/myJspPage.jsp");

编辑

当您处于任何非动作方法时,您可以使用以上任何一种方法!但是,当您在任何操作方法中时,正确JSF的重定向方法是:

public String goToOutsideAction(){
    ....
    return "/myPage.xhtml?faces-redirect=true"
}

该方法应该返回一个上下文相关的视图 ID,并且目标必须是一个 JSF 页面。

于 2013-05-27T17:04:48.133 回答
1

您可以通过调用获取托管 bean 中的响应对象

HttpServletResponse response = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse()

代码改编自How to stream a file download in a JSF backing bean? )

获得响应对象后,您可以对其执行任何操作,例如更改标头。显然,有些事情你不能做,比如从 ajax 请求发送重定向。

于 2013-05-27T17:11:48.890 回答