Jsp JSF中的响应对象

Jsp JSF中的响应对象,jsp,jsf,response.redirect,Jsp,Jsf,Response.redirect,我觉得这将是一个最简短的回答是:“这就是为什么JSF取代了JSP”的问题,但我会继续问下去 问题:我想知道:我能获得JSF页面的响应对象吗(如果有的话) 为什么奇怪?:我发现自己处于一种需要从JSF页面传递到JSP页面的情况,所以我想为什么不从JSF页面调用的bean重定向(使用response.sendRedirect)然后。。。你可以看到它的方向 我觉得这可以用一种更干净的方式来完成,但不知道怎么做 编辑:在这篇文章中,我还将询问哪种方式最适合从重定向到JSF页面 提前感谢您的建议。好吧,如

我觉得这将是一个最简短的回答是:“这就是为什么JSF取代了JSP”的问题,但我会继续问下去

问题:我想知道:我能获得JSF页面的响应对象吗(如果有的话)

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

我觉得这可以用一种更干净的方式来完成,但不知道怎么做

编辑:在这篇文章中,我还将询问哪种方式最适合从重定向到JSF页面


提前感谢您的建议。

好吧,如果您想获得
响应
对象,您可以在
JSF
中获得它,如下面所示

HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
但是你不需要得到
响应
对象,只需要重定向到
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页面。

您可以通过调用

HttpServletResponse response = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse()
代码(改编自)


一旦有了响应对象,就可以对其执行任何操作,如更改头。显然,有些事情你不能做,比如从ajax请求发送重定向。

不确定是否理解真正的问题,但我可以建议使用
,如图所示。实际上,我的意思是这个问题是一般性的,所以在JSF中关于重定向的任何事情都会对我有好处:)所以outputLink替换了
标记,现在,如何从bean内部重定向呢?您可以通过调用
HttpServletResponse=(HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse()
(从中获取)在托管bean中获取响应对象,然后对
HttpServletResponse
对象执行操作。显然,有些事情是不能做的,比如从ajax请求发送重定向。这很奇怪,两个家伙在几乎同一时间给出了相同的答案。。。如果你能把它作为一个答案贴出来,那么我至少可以投票。谢谢,如果我把@Sarradur Rahaman的答案标记为被接受的答案,你会同意吗?看来他是第一个……谢谢,
page.xhtml?faces redirect=true也行,哪一个最好?是的!当然,
return“url.com/page.jsp?faces redirect=true”
是处理重定向的正确jsf方法,有关详细信息,您可以看到问题的答案。不过,请注意,从jsf页面重定向到jsp页面会引起麻烦吗?@Gloserio nope,它只会在JSP页面上生成一个GET请求。@LuiggiMendoza:那么,当您重定向到JSP时,JSF页面中的bean会怎么样,它们不会有什么特别的问题吗?他们的行为如何?