隨筆-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 七匹狼 閱讀(499) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 关岭| 平谷区| 肃宁县| 来宾市| 绵阳市| 富民县| 双城市| 巩义市| 大连市| 丹东市| 扶余县| 扬州市| 乌兰察布市| 容城县| 松阳县| 许昌县| 水城县| 鄂州市| 理塘县| 濮阳县| 栾城县| 和平区| 安顺市| 方正县| 博湖县| 公安县| 讷河市| 淳化县| 长兴县| 四川省| 安国市| 炎陵县| 城固县| 文成县| 荆州市| 四川省| 拉萨市| 乐亭县| 景宁| 北京市| 甘孜|