piliskys

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            25 隨筆 :: 0 文章 :: 40 評論 :: 0 Trackbacks
          當今的報表分頁在很多系統中都扮演著十分重要的角色,對于很多組件技術如CR、BO,等都是很好的報表工具,分頁技術當然不在話下,
          在此,我所說的是一般的jsp頁面展現報表的討論,
          圖片找不到
          如上圖(在此只做為一舉例),一個表單一般分為表頭,表內容和表尾,還有一些頁數的選擇,
          在此我們討論幾種實現的方法:
          一,一公用頁面和公用java類實現法---將表頭及表內容查詢的sql及表尾內容寫入一xml文件中,當調用表單時,在javat程序中設用xml文件中的相應ID,找到及解析相應的內容,存放在java對象中,然后在jsp頁面得到相應的java對象加以顯示,此為一過程, 在此可謂第一次調用完成。
           當點擊第二次調用時,此處有多種方法,1,在頁面隱藏保存相應xml中的ID,后面同第一次程序實現相同,但此處解析xml文件的開銷過大。2,將第一次存放在java對象存放在session中,這樣,先判斷session中是否有值,有值直接取出,沒有就到xml文件中解析, 此方法省去了多次解析xml文件的操作,但增加了session的負擔,而且當不再做表單查詢操作也不能很好釋放session中內容。
          二,一查詢對應一頁面和java類,此方法實現比較簡單,表樣式可以先畫好,傳入一些相應變量進行展現,但這種做法很難統一管理,要對表結構和樣式做變動時較難解決,而且代碼冗余度大。
          三,目前我認為較好些的辦法, 把表中表頭即表的B部分抽取成一靜態頁面,而表ACD部分都放入xml文件中定義,此定義內容相比之下比第一種方法減少很多,因為表B部分是對xml最難對應的一部分,寬度、位置,名稱及對應java變量名稱等都要定義,而對于多行表頭是更難定義,
          因為表ACD我們可以在xml中定義(此處采用spring的xml解析

           1<?xml version="1.0" encoding="GB2312"?>
           2<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">
           3<beans>
           4    <bean id="queryinfo" class="online.common.query.vo.QueryInfo">
           5        <property name="title"><value>發票出庫</value></property>
           6        <property name="headInfo"><ref local="headInfo"/></property>
           7        <property name="footInfo"><ref local="footInfo"/></property>
           8        <property name="sqlStr"><value><![CDATA[select t.billdataid aa,'200501' bb, '建筑發票' cc, t.billstatus dd,t.taxofficialcode ee, '1000' ff, '1005' gg, 0.98 hh,
           9t.taxtotal ii, '調撥' jj
          10from billdata t
          11              ]]></value></property>
          12    </bean>
          13    <bean id="headInfo" class="online.common.query.vo.HeadInfo">
          14        <property name="lineItemNum"><value>2</value></property>
          15        <property name="itemList">
          16           <list>
          17            <value>出庫單位</value>
          18            <value>統計日期</value>
          19           </list>
          20        </property>
          21        <property name="engList">
          22           <list>
          23            <value>gljg</value>
          24            <value>tjlq</value>
          25           </list>
          26        </property>
          27   </bean> 
          28   <bean id="footInfo" class="online.common.query.vo.FootInfo">
          29        <property name="itemList">
          30           <list>
          31            <value>驗收單位:</value>
          32            <value>驗收日期:</value>
          33           </list>
          34        </property>
          35        <property name="engList">
          36           <list>
          37            <value>theuser</value>
          38            <value>thedate</value>
          39           </list>
          40        </property>
          41   </bean>
          42</beans>
          然后在公用的查詢jsp頁面中expression為傳入參數(表頭B部分靜態頁面地址);
          <jsp:include page="<%= expression %>"  /> 
          公用頁面ACD部分
          for(int i=0;i<=headItemList.size()/lineItemNum;i++{
              headStr 
          += "<tr>";
            
          if(i==headItemList.size()/lineItemNum)  {
               ind 
          =headItemList.size()%lineItemNum ;
            }

              
          for(int j=0;j<ind;j++{
                  headStr 
          += " <td  align=\"center\"  colspan=\"2\">"+ headItemList.get(i*lineItemNum+j) + "£o" + paramMap.get(engItemList.get(i*lineItemNum+j))  +"</td>";
              }

              headStr 
          += "</tr>";
          }

          %>
          <%=headStr%>
           
          <%要輸出的內容  
                     
          for(int i=0;i<pageList.size();i++){
                    pageStr 
          += "<tr>";
                   HashMap obj 
          =(HashMap) pageList.get(i);
                      
          for(int j=0;j<coumNum;j++)
                    pageStr 
          += " <td class=\"tdbg0\"  >"+obj.get(engnList.get(j)) +"</td>";
                    pageStr 
          += "</tr>";
                     }


          %>
          <%=pageStr%>
          <% //表尾
          String footStr = "";
                footStr 
          += "<tr>";
              
          for(int j=0;j<footList.size();j++{
                  footStr 
          += " <td  align=\"center\"  colspan=\"2\">"+ footList.get(j) + "£o" + paramMap.get(engfootList.get(j))  +"</td>";
              }

              footStr 
          += "</tr>";
          %>
          <%=footStr%>

          spring映射代碼略.............
          總結:我們清楚,當一次調用報表時,無論是點第幾頁,它的ABD部分是不會變的,因此,能把此三部分都在第一次調用都生成靜態頁或此三部分在第一次生成調用后,翻頁操作就不在調用(曾試過用frame,效果不是很好),若能解決此部分,可將再次提高java和頁面的執行效率................
          posted on 2005-11-17 17:40 霹靂火 閱讀(505) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 靖边县| 岚皋县| 九龙坡区| 剑河县| 蓝田县| 澳门| 泰宁县| 临澧县| 珠海市| 龙南县| 虹口区| 基隆市| 山西省| 沾化县| 突泉县| 墨竹工卡县| 安龙县| 海城市| 钦州市| 沧源| 灯塔市| 涞水县| 吉林市| 县级市| 出国| 七台河市| 延安市| 涞水县| 斗六市| 泉州市| 即墨市| 遵义县| 大理市| 长治市| 融水| 舟曲县| 保亭| 府谷县| 临高县| 霍山县| 广宗县|