当今的报表分页在很多系统中都扮演着十分重要的角色,对于很多组件技术如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解析
xml version="1.0" encoding="GB2312"?>
DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="queryinfo" class="online.common.query.vo.QueryInfo">
<property name="title"><value>发票出库value>property> 6
<property name="headInfo"><ref local="headInfo"/>property>
<property name="footInfo"><ref local="footInfo"/>property>
<property name="sqlStr"><value>select t.billdataid aa,'200501' bb, '建筑发票' cc, t.billstatus dd,t.taxofficialcode ee, '1000' ff, '1005' gg, 0.98 hh,
t.taxtotal ii, '调拨' jj10
from billdata t
]]>value>property>
bean>
<bean id="headInfo" class="online.common.query.vo.HeadInfo">
<property name="lineItemNum"><value>2value>property>
<property name="itemList">
<list>
<value>出库单位value>
<value>统计日期value>
list>20
property>
<property name="engList">
<list>
<value>gljgvalue>
<value>tjlqvalue>
list>
property>
bean>
<bean id="footInfo" class="online.common.query.vo.FootInfo">
<property name="itemList">
<list>
<value>验收单位:value>
<value>验收日期:value>
list>
property>
<property name="engList">
<list>
<value>theuservalue>
<value>thedatevalue>
list>
property>
bean>
beans>
<jsp:include page="<%= expression %>" /> 
for(int i=0;i<=headItemList.size()/lineItemNum;i++)
{
headStr += "
if(i==headItemList.size()/lineItemNum)
{
ind =headItemList.size()%lineItemNum ;
}
for(int j=0;j<ind;j++)
{
headStr += "
}
headStr += "
}
%>
<%=headStr%>
<%要输出的内容 
for(int i=0;i<pageList.size();i++)
{
pageStr += "
HashMap obj =(HashMap) pageList.get(i);
for(int j=0;j<coumNum;j++)
pageStr += "
pageStr += "
}
%>
<%=pageStr%>
<% //表尾
String footStr = "";
footStr += "
for(int j=0;j<footList.size();j++)
{
footStr += "
}
footStr += "
%>
<%=footStr%>
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/134308/viewspace-140574/ ,如需转载,请注明出处,否则将追究法律责任。