[b]问题描述:[/b]
包含jsp:include的页面是通过Action方式跳转,jsp:include的page属性页也设置的是Action方式跳转。
当jsp:include默认flush=false时,页面直接跳转到jsp:include的page属性指定的页面。
当jsp:include=true时,被include的页面位置报错,提示请求已经提交。
[b]原因说明:[/b]
关键在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进行提交,所以页面报错,提示请求已经提交。
[b]遗留问题:[/b]
this.doInclude(uri, request, response); 方法具体执行内容?
包含jsp:include的页面是通过Action方式跳转,jsp:include的page属性页也设置的是Action方式跳转。
当jsp:include默认flush=false时,页面直接跳转到jsp:include的page属性指定的页面。
当jsp:include=true时,被include的页面位置报错,提示请求已经提交。
[b]原因说明:[/b]
关键在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进行提交,所以页面报错,提示请求已经提交。
[b]遗留问题:[/b]
this.doInclude(uri, request, response); 方法具体执行内容?
解析Struts框架中jsp:include处理逻辑及问题解决
本文深入探讨了Struts框架中使用jsp:include标签时遇到的问题,特别是当jsp:include的page属性指向Action方式跳转且flush属性设置不同情况下的行为。解释了Struts框架在不同flush状态下对jsp:include处理的区别,并提供了问题解决方案。
2159

被折叠的 条评论
为什么被折叠?



