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 周銳 閱讀(870) 評論(3)  編輯  收藏 所屬分類: Struts
          主站蜘蛛池模板: 青岛市| 泾阳县| 托克逊县| 苍山县| 凤翔县| 简阳市| 巴林右旗| 武定县| 翼城县| 德化县| 墨竹工卡县| 台南县| 洪洞县| 广灵县| 双鸭山市| 宣恩县| 会同县| 岑溪市| 孝昌县| 忻城县| 泌阳县| 胶州市| 唐山市| 镇沅| 巫溪县| 云梦县| 临潭县| 富锦市| 拜城县| 新丰县| 轮台县| 莆田市| 弥勒县| 玉龙| 北海市| 大新县| 墨脱县| 辛集市| 健康| 扬中市| 阳城县|