如何通过支持方法适当地重定向到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文件?

最佳答案

您不能使用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");
}

09-26 09:43