隨筆-13  評論-28  文章-63  trackbacks-0

          應用displaytag在struts中完成大數據量分頁顯示,Oracle數據庫

          ?

          JSP文件:

          ?

          <% @?taglib?uri = " /WEB-INF/displaytag.tld " ?prefix = " disp " ? %>

          < disp:table? name ="resultList" ?export ="true" ?pagesize ="100" ?requestURI ="logQueryAction.do" ?sort ="external" ?id ="element" ?partialList ="true" ?size ="resultSize" >
          ??????????
          < disp:column? property ="operdate" ?title ="操作時間" ? ></ disp:column >
          ??????????
          < disp:column? property ="pername" ?title ="操作人員" ? ></ disp:column >
          ??????????
          < disp:column? property ="opertype" ?title ="操作類型" ? ></ disp:column >
          </ disp:table > ?

          ?

          name="resultList" 將記錄集存在session或者request中的鍵值
          export="true" 是否顯示導出選項
          pagesize="100" 每頁顯示100條數據
          requestURI="logQueryAction.do"? struts中action的名稱,如果記錄少,可以直接分頁
          sort="external"? 外部排序
          id="element"?? 表格id值,用于程序得相關的參數
          partialList="true"? 分段從數據庫中讀數據
          size="resultSize"? 記錄的總條數,用于計算總頁數

          ?

          struts action:

          ?

          String?pageIndexName? = ? new ?org.displaytag.util.ParamEncoder( " element " ).encodeParameterName(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE);?? // 頁數的參數名
          ????????
          int ?pageSize? = ? 100 ;?? //每頁顯示的條數
          ????????
          int ?pageIndex? = ?GenericValidator.isBlankOrNull(request.getParameter(pageIndexName)) ? 0 :(Integer.parseInt(request.getParameter(pageIndexName))? - ? 1 );? //當前頁數
          String?sqlCount?
          = ? " select?count(*)??from?user_log?a? " ;? //用于統計總記錄數的sql語句
          ????????String?sql?
          = ? " ?select?*?from?(select?rownum?as?rid,?t1.*?from?(select?b.pername?as?pername,to_char(a.operdate,'yyyy-mm-dd?hh24:mi:ss')?as?operdate, " ? +
          ????????????????
          " ?decode(a.opertype,'D','刪除','M','修改','其他')?as?opertype,?a.hphm?as?hphm?from?user_log?a,? " ? +
          ????????????????
          " ?(select?asuser.userid?as?userid,nvl(asempmsg.pername,asuser.loginname)?as?pername?from?asuser,ASEMPMSG?where?asuser.perid=ASEMPMSG.perid(+))?b " ? +
          ????????????????
          " ?where?a.userid=b.userid? " ;???//查詢語句
          ??????????? //構造查詢條件
          ????????StringBuffer?sb?
          = ? new ?StringBuffer();
          ????????
          if (logQueryForm.getCzrqStart() != null ? && ? ! "" .equals(logQueryForm.getCzrqStart())) {
          ????????????sb.append(
          " ?and?a.operdate?>?to_date(' " + logQueryForm.getCzrqStart() + " ','yyyy-mm-dd') " );
          ????????}

          ????????
          if (logQueryForm.getCzrqEnd() != null ? && ? ! "" .equals(logQueryForm.getCzrqEnd())) {
          ????????????sb.append(
          " ?and?a.operdate?<=?to_date(' " + logQueryForm.getCzrqEnd() + " ','yyyy-mm-dd') " );
          ????????}

          ????????
          if (logQueryForm.getCzlx() != null ? && ? ! "" .equals(logQueryForm.getCzlx())) {
          ????????????sb.append(
          " ?and?a.opertype?=?' " + logQueryForm.getCzlx() + " ' " );
          ????????}

          ????????
          if (logQueryForm.getCzry() != null ? && ? ! "" .equals(logQueryForm.getCzry())) {
          ????????????sb.append(
          " ?and?a.userid?=?' " + logQueryForm.getCzry() + " ' " );
          ????????}

          ?????

          ????????sqlCount?
          += ?sb.toString();
          ????????sql?
          += ?sb.toString() + " ?order?by?a.operdate?desc)?t1?where?rownum<= "
          ????????????????????????
          + ?(pageIndex? + ? 1 )? * ?pageSize? + ? " ?)?t2?where?t2.rid> " + ?pageIndex? * ?pageSize;? //分頁讀取語句
          ????????
          ????????
          // System.out.println(sb.toString());
          ????????DBBean?db? = ? new ?DBBean();
          ????????ResultSet?rs?
          = ? null ;
          ????????PreparedStatement?prep?
          = ? null ;
          ????????
          try {
          ????????????List?resultList?
          = ?db.getResultList(sql);?? //將ResultSet保存在List里返回
          ????????????request.setAttribute(
          " resultList " ,resultList);? //把結果存入request
          ????????????prep?
          = ?db.getConnection().prepareStatement(sqlCount);???
          ????????????rs?
          = ?prep.executeQuery();
          ????????????
          if (rs.next()) {
          ????????????????request.setAttribute(
          " resultSize " , new ?Integer(rs.getInt( 1 )));???? //將總記錄數保存成Intger實例保存在request中
          ????????????}

          ????????}

          ????????
          catch (Exception?ex) {
          ????????????ex.printStackTrace();
          ????????}

          ????????
          finally {
          ????????????
          if (db != null ) {
          ????????????????db.closeConnection();??? //關閉連接
          ????????????}
          ?
          ????????}

          ?

          其中的頁面導航是英文的,只要修改org.displaytag.properties.TableTag.properties配置文件就可以把英文改成中文。同時還可以指定導出文件的類型以及文件名。

          export.excel = true
          export.excel.label
          = <span?class = " export?excel " >Excel?</span>
          export.excel.include_header
          = true
          export.excel.filename
          = export.xls

          如果不指定文件名,在點擊導出excel的時候,就會在ie窗口中打開excel文件。很煩人!
          指定文件名后就可以選擇保存和打開了。



          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1076047

          posted on 2006-10-31 17:53 七匹狼 閱讀(498) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 台南市| 即墨市| 屏南县| 锦屏县| 镇安县| 福州市| 白玉县| 建瓯市| 兴山县| 尼木县| 萨嘎县| 铁岭县| 连城县| 利辛县| 宁化县| 彭州市| 怀化市| 大埔县| 綦江县| 英德市| 上蔡县| 宁国市| 汾西县| 玛沁县| 江陵县| 天祝| 平乐县| 兖州市| 土默特右旗| 土默特左旗| 和林格尔县| 永德县| 安达市| 盐亭县| 阿荣旗| 哈尔滨市| 开阳县| 南郑县| 教育| 文成县| 鹤岗市|