1,出现情景:
在我们项目中,选择一库存模块后,弹出一选择库存组织对话框,选择,确定,(action=#{xxForm.putInvOrg}),然后要求返回.
2,解决方法:
本来是这样做的.
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletResponse res =
(HttpServletResponse)facesContext.getExternalContext().getResponse();
res.sendRedirect("/cos"+url+"?init=true");
在tomcat上会出现问题,提示reponse已经发出.这表示,在执行 res.sendRedirect("/cos"+url+"?init=true");的时候错.
后来改成这样做:
ExternalContext eContext=FacesContext.getCurrentInstance().getExternalContext();
eContext.redirect("/cos"+url+"?init=true");
可以了。
3,总结
看了下api,原来HttpServletResponse res =
(HttpServletResponse)facesContext.getExternalContext().getResponse(); 这代码已经把reponse发出了。
而
eContext.redirect("/cos"+url+"?init=true");执行完才发出reponse.所以不会出现问题.
见api说明:
abstract java.lang.Object | getResponse() Return the environment-specific object instance for the current response. |
abstract void | redirect(java.lang.String url) Redirect a request to the specified URL, and cause the responseComplete() method to be called on the FacesContext instance for the current request. |