posts - 431,  comments - 344,  trackbacks - 0
肖菁
软件工程师

[文章摘要] Struts tiles中提供了基于模版的页面组装框架,然而模版中需要包含.do文件的内容时,我们遇到了麻烦,本文中作者给出了一种简单的方式来解决这个问题。

[关键词] Struts Tiles

1  问题描述

我们在Web应用中使用Struts Tiles时,如果被组装的内容是.do的内容,比如下面的例子,将会出现错误信息。

实际例子:<insert:put attribute=" /companyView.do?action=before_new">

错误信息:ServletException in '/companyView.do?action=before_new': 应答已经提交。

2  问题原因分析

tiles 使用了 JSP 的 jsp:include 技术实现页面组装,只能适用于 jsp 页面,无法用于 .do 这样的情况。

找到出错的地方:

TilesUtilImpl.java 的 doInclude(String uri, PageContext pageContext)

2.1  doInclude 方法源代码

public void doInclude(String uri, PageContext pageContext)

throws IOException, ServletException {

pageContext.include(uri);

}

3  问题解决

3.1  修改 doInclude 方法

public void doInclude(String uri, PageContext pageContext)

throws IOException, ServletException {

if (uri.indexOf(".jsp") > 0)

pageContext.include(uri);

else if (uri.indexOf(".do") > 0)

pageContext.getOut().write(getPageContent(uri, pageContext));

}

3.2 给 TilesUtilImpl 增加一个新的方法getPageContent,获取 .do 文件的内容用于显示

private String getPageContent(String uri, PageContext pageContext) {

String result = "";

HttpServletRequest request = (HttpServletRequest) pageContext .getRequest();

String contextPath = request.getContextPath();

String serverIP = request.getServerName();

String serverPort = String.valueOf(request.getServerPort());

String uriTmp = "http://";

if (serverPort.equals("80"))

uriTmp = uriTmp + serverIP;

else

uriTmp = uriTmp + serverIP + ":" + serverPort;

uriTmp = uriTmp + contextPath;

if (uri.startsWith("/"))

uriTmp += uri;

else

uriTmp += "/" + uri;

try {

URL url = new URL(uriTmp);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

BufferedReader reader = new BufferedReader(new InputStreamReader(

conn.getInputStream()));

String line = null;

while ((line = reader.readLine()) != null) {

result += line;

}

conn.disconnect();

reader.close();

} catch (Exception e) {

e.printStackTrace();

}

return result;

}
posted on 2007-01-26 15:04 周锐 阅读(827) 评论(3)  编辑  收藏 所属分类: Struts

只有注册用户登录后才能发表评论。


网站导航: