通过隐式导航重定向到servlet?

时间:2012-08-21 21:22:02

标签: java jsf java-ee servlets

如何通过支持方法将属性重定向到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文件?

2 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:-1)

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

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