應用displaytag在struts中完成大數(shù)據(jù)量分頁顯示,Oracle數(shù)據(jù)庫
?
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條數(shù)據(jù)
requestURI="logQueryAction.do"? struts中action的名稱,如果記錄少,可以直接分頁
sort="external"? 外部排序
id="element"?? 表格id值,用于程序得相關的參數(shù)
partialList="true"? 分段從數(shù)據(jù)庫中讀數(shù)據(jù)
size="resultSize"? 記錄的總條數(shù),用于計算總頁數(shù)
?
struts action:
?
String?pageIndexName?
=
?
new
?org.displaytag.util.ParamEncoder(
"
element
"
).encodeParameterName(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE);?? // 頁數(shù)的參數(shù)名
????????
int
?pageSize?
=
?
100
;?? //每頁顯示的條數(shù)
????????
int
?pageIndex?
=
?GenericValidator.isBlankOrNull(request.getParameter(pageIndexName))
?
0
:(Integer.parseInt(request.getParameter(pageIndexName))?
-
?
1
);? //當前頁數(shù)
String?sqlCount?
=
?
"
select?count(*)??from?user_log?a?
"
;? //用于統(tǒng)計總記錄數(shù)的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
)));???? //將總記錄數(shù)保存成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
七匹狼 閱讀(497)
評論(0) 編輯 收藏 所屬分類:
java