1

如何通过支持方法正确地重定向到 servlet?

class MyBean{ 
    public String doRedirect() {
        //some conditions
        return "newlocation";
    }
}


<h:commandButton value="Test" action="#{myBean.doRedirect}" />

这会将我重定向到 newlocation.xhtml。

但是如果我有一个 WebServlet 呢?

@WebServlet(urlPatterns = "/newlocation")

然后如何重定向到 servlet 而不是 xhtml 文件?

4

2 回答 2

2

您不能使用 JSF 导航处理程序导航到非 JSF 资源。

直接使用ExternalContext#redirect()方法即可:

public void doRedirect() throws IOException {
    FacesContext.getCurrentInstance().getExternalContext().redirect("newlocation");
}

或者,如果您不确定当前的请求路径:

public void doRedirect() throws IOException {
    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    ec.redirect(ec.getRequestContextPath() + "/newlocation");
}
于 2012-08-21T21:27:29.883 回答
-1

您可以访问原始 HTTPServletResponse 并使用其 API 进行重定向

HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.sendRedirect(URL);
于 2012-08-21T21:27:45.677 回答