日期:2014-05-16  浏览次数:20405 次

jsp:include与struts1.0问题记录,与Action配合使用。
问题描述:
包含jsp:include的页面是通过Action方式跳转,jsp:include的page属性页也设置的是Action方式跳转。
当jsp:include默认flush=false时,页面直接跳转到jsp:include的page属性指定的页面。
当jsp:include=true时,被include的页面位置报错,提示请求已经提交。
原因说明:
关键在struts1.0处理跳转的时候,用的是org.apache.struts.tiles.TilesRequestProcessor类的以下代码:
protected   void   doForward(
String   uri,
HttpServletRequest   request,
HttpServletResponse   response)
throws   IOException,   ServletException   {
                       
if   (response.isCommitted())   {
this.doInclude(uri,   request,   response);
                       
}   else   {
super.doForward(uri,   request,   response);
}
}
1.当 <jsp:include   page= "**.do "/> 前面没有输出,且flush默认为false时,response是没有commit的。所以struts全部把它当forward处理了。
2.当flush=true时,response进行提交,所以页面报错,提示请求已经提交。
遗留问题:
this.doInclude(uri,   request,   response); 方法具体执行内容?