应用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
七匹狼 阅读(488)
评论(0) 编辑 收藏 所属分类:
java