从 jsf bean 转发请求有一个奇怪的问题。请求正在转发,没有任何问题。转发到 url 页面在浏览器中正确显示,只是在页面底部,它还包含从 jsf 页面转发的结果。
在进行转发之前,我尝试过执行 response.reset() 。但它仍然无法正常工作。
我使用 Balus 方便的 LifeCycleListner 来查看发生了什么。下面是我看到的
- SystemOut O 开始阶段 RESTORE_VIEW(1)
- SystemOut O END PHASE RESTORE_VIEW(1)
- SystemOut O 开始阶段 RENDER_RESPONSE(6)
- SystemOut O 管理 bean 做 Forward
- SystemOut O 在转发到应用程序中
- SystemOut O END PHASE RENDER_RESPONSE(6) => 返回 Render_reponse 短语
我猜当它回到 Render_response 短语时,它会将 jsf 页面附加到转发到页面的末尾。
我的转发代码如下所示:
public void forwardHttpRequestTo(String url) {
try {
HttpServletRequest request = getHttpServletRequest();
HttpServletResponse response = getHttpServletRespose();
try {response.reset();} catch (Exception ex) {ex.printStackTrace();};
RequestDispatcher dispatcher = request.getRequestDispatcher(url);
dispatcher.forward(request, response);
}
catch (Exception ex) {
throw (RuntimeException) ex;
}
}
public HttpServletRequest getHttpServletRequest() {
return (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
}
public HttpServletResponse getHttpServletRespose() {
return (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
}