用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
it_man的公告
欢迎大家和我互相交流. email与我联系.
文章分类
便民服务
IP地址、手机号码、身份证查询
万年历查询
中日英在线翻译 (RSS)
在线翻译(中日英)
天气预报
火车时刻表查询
航班时刻查询系统
酒店信息查询
管理知识网站
世界经理人网站
免费资源
1G网络硬盘(还有大量免费视频)
其他
最好的股票BBS
我的圈子(群)
IT圈里圈外(圈子)
IT圈里圈外(群组)(RSS)
娱乐频道
天涯社区BBS
拂晓雅阁(超人气BBS)
资源中心
AJax技术论坛
IBM中国
中国it实验室
中国教育学习网
教育人生网
沪江网( 最牛的语言学习网)
存档

转载  DisplayTag分页标签应用指南(转) 收藏

先讲DisplayTag一般应用,  最后在讲在数据大的时候,怎么结合hibernater应用.

DisplayTag是一个非常好用的表格显示标签,适合MVC模式,其主页在http://displaytag.sourceforge.net
  
   一、最简单的情况,未使用<display:column/>标签
  
   <%request.setAttribute( "test", new ReportList(6) );%>
   <display:table name="test" />
  
   标签遍历List里的每一个对象,并将对象里的所有属性显示出来。一般用于开发的时候检查对象数据的完整性。
  
   二、使用<display:column/>标签的情况
  
   <display:table name="test">
   <display:column property="id" title="ID" />
   <display:column property="name" />
   <display:column property="email" />
   <display:column property="status" />
   <display:column property="description" title="Comments"/>
   </display:table>
  
   property对应List里对象的属性(用getXXX()方法取得),title则对应表格表头里的列名。定义列有两种方式:
  
   A、<display:column property="email" />
  
   使用<display:column/>标签里的property属性来定义
  
   B、<display:column title="email">email@it.com</display:column>
  
   在<display:column/>标签体里增加内容,可以是常量,也可以用其他标签等等
  
   两种方式比较,用property属性来定义更加快速和利于排序。
  
   三、表格显示样式的定义
  
   A、在<display:table/>和<display:column/>标签里指定标准的html属性,烦琐
  
   B、修改样式表
   <display:table name="test" class="mars">
   <display:column property="id" title="ID" class="idcol"/>
   <display:column property="name" />
   <display:column property="email" />
   <display:column property="status" class="tableCellError" />
   <display:column property="description" title="Comments"/>
   </display:table>
  
   通过class属性来指定所要应用的样式。可以在其默认样式表里(./css/screen.css)直接修改
  
   四、标签取得数据的数据源
  
   有四种范围
  
   pageScope
   requestScope (默认) <display:table name="test2" >
   sessionScope <display:table name="sessionScope.holder.list" > 注意,这里要指定范围,非默认
   applicationScope
  
   五、通过增加id属性创建隐含的对象
  
   <display:table name="test" id="testit">
   <display:column property="id" title="ID" />
   <display:column property="name" />
   <display:column title="static value">static</display:column>
   <display:column title="row number (testit_rowNum)"><%=pageContext.
getAttribute("testit_rowNum")%></display:column>
   <display:column title="((ListObject)testit).getMoney()">
<%=((ListObject)pageContext.
getAttribute("testit")).getMoney()%></display:column>
   </display:table>
  
   注意到在<display:table/>里增加了id属性,这时就在page context里创建了一个隐含对象,指向List里的当前对象,
  
   可以通过(ListObject)pageContext.getAttribute("id")来捕获这个对象。同时还创建了一个id_rowNum对象,同样,可
  
   通过pageContext.getAttribute("testit_rowNum")来捕获,它仅仅代表当前行的行数。
  
   有了这两个隐含对象,就可以通过其他标签来访问,例如Jstl:
  
   <display:table id="row" name="mylist">
   <display:column title="row number" >
   <c:out value="${row_rowNum}"/>
   </display:column>
   <display:column title="name" >
   <c:out value="${row.first_name}"/>
   <c:out value="${row.last_name}"/>
   </display:column>
   </display:table>
  
   六、显示部分数据
  
   显示开始五条数据:通过设定length属性
  
   <display:table name="test" length="5">
   <display:column property="id" title="ID" />
   <display:column property="email" />
   <display:column property="status" />
   </display:table>
  
   显示第三到第八条数据:通过设定offset和length属性
  
   <display:table name="test" offset="3" length="5">
   <display:column property="id" title="ID" />
   <display:column property="email" />
   <display:column property="status" />
   </display:table>
  
   七、对email和url地址的直接连接
  
   <display:table name="test" >
   <display:column property="id" title="ID" />
   <display:column property="email" autolink="true" />
   <display:column property="url" autolink="true" />
   </display:table>
  
   如果要显示的对象里包含email和url地址,则可以在display:column里直接设定autolink="true"来直接连接
  
   八、使用装饰模式转换数据显示(写自己的 decorator )
  
   A、对整个表格应用decorator
  
   <display:table name="test" decorator="org.displaytag.sample.Wrapper" >
   <display:column property="id" title="ID" />
   <display:column property="email" />
   <display:column property="status" />
   <display:column property="date" />
   <display:column property="money" />
   </display:table>
   org.displaytag.sample.Wrapper即自己写的decorator,它要继承TableDecorator类,看看它的一个方法:
   public String getMoney()
   {
   return this.moneyFormat.format(((ListObject) this.getCurrentRowObject()).getMoney());
   }
  
   很明显,它通过父类的getCurrentRowObject()方法获得当前对象,然后对其getMoney()方法进行‘油漆’
  
   B、对单独的column应用decorator
  
   <display:table name="test">
   <display:column property="id" title="ID" />
   <display:column property="email" />
   <display:column property="status" />
   <display:column property="date" decorator="org.displaytag.sample.LongDateWrapper" />
   </display:table>
   org.displaytag.sample.LongDateWrapper要实现ColumnDecorator接口,它的方法:
   public final String decorate(Object columnValue)
   {
   Date date = (Date) columnValue;
   return this.dateFormat.format(date);
   }
  
   显然,它获得不了当前对象(因为它实现的是接口),仅仅是获得该对象的columnValue,然后‘油漆’
  
   九、创建动态连接
  
   有两种方法创建动态连接:
  
   A、在<display:column/>里通过增加href、paramId、paramName、paramScope、paramProperty属性
  
   href       基本的URL 地址
   paramId     加在URL 地址后的参数名称
   paramName    数据bean的名称,一般为null(即使用当前List里的对象)
   paramScope    数据bean的范围,一般为null
   paramProperty  数据bean的属性名称,用来填充URL 地址后的参数值
   <display:table name="sessionScope.details">
   <display:column property="id" title="ID" href="details.jsp" paramId="id" />
   <display:column property="email" href="details.jsp" paramId="action"
paramName="testparam" paramScope="request" />
   <display:column property="status" href="details.jsp"
paramId="id" paramProperty="id" />
   </display:table>
  
   这种方法简便直接,但缺点是无法产生类似details.jsp?id=xx&action=xx的复合URL
  
   B、应用decorator 创建动态连接:
  
   <display:table name="sessionScope.details" decorator=
"org.displaytag.sample.Wrapper" >
   <display:column property="link1" title="ID" />
   <display:column property="email" />
   <display:column property="link2" title="Actions" />
   </display:table>
   org.displaytag.sample.Wrapper里的方法:
   public String getLink1()
   {
   ListObject lObject= (ListObject)getCurrentRowObject();
   int lIndex= getListIndex();
   return "<a href=\"details.jsp?index=" + lIndex + "\">"
+ lObject.getId() + "</a>";
   }
  
   public String getLink2()
   {
   ListObject lObject= (ListObject)getCurrentRowObject();
   int lId= lObject.getId();
  
   return "<a href=\"details.jsp?id=" + lId
   + "&action=view\">View</a> | "
   + "<a href=\"details.jsp?id=" + lId
   + "&action=edit\">Edit</a> | "
   + "<a href=\"details.jsp?id=" + lId
   + "&action=delete\">Delete</a>";
   }
  
   十、分页
  
   实现分页非常的简单,增加一个pagesize属性指定一次想显示的行数即可
  
   <display:table name="sessionScope.test" pagesize="10">
   <display:column property="id" title="ID" />
   <display:column property="name" />
   <display:column property="email" />
   <display:column property="status" />
   </display:table>
  
   十一、排序
  
   排序实现也是很简单,在需要排序的column里增加sortable="true"属性,headerClass="sortable"仅仅是
  
   指定显示的样式。column里的属性对象要实现Comparable接口,如果没有的话可以应用decorator
  
   defaultsort="1"       默认第一个column排序
   defaultorder="descending"  默认递减排序
   <display:table name="sessionScope.stest" defaultsort="1"
defaultorder="descending">
   <display:column property="id" title="ID" sortable="true"
headerClass="sortable" />
   <display:column property="name" sortable="true" headerClass="sortable"/>
   <display:column property="email" />
   <display:column property="status" sortable="true" headerClass="sortable"/>
   </display:table>
  
   注意的是,当同时存在分页时排序仅仅针对的是当前页面,而不是整个List都进行排序
  
   十二、column 分组
  
   分组只是需要在column里增加group属性
  
   <display:table name="test" class="simple">
   <display:column property="city" title="CITY" group="1"/>
   <display:column property="project" title="PROJECT" group="2"/>
   <display:column property="amount" title="HOURS"/>
   <display:column property="task" title="TASK"/>
   </display:table>
  
   十三、导出数据到其他格式(页面溢出filter??)
  
   在<display:table/>里设定export="true"
  
   在<display:column/>里设定media="csv excel xml pdf" 决定该字段在导出到其他格式时被包不包含,不设定则都包含
  
   <display:setProperty name="export.csv" value="false" />
  
   决定该种格式能不能在页面中导出
  
   <display:table name="test" export="true" id="currentRowObject">
   <display:column property="id" title="ID"/>
   <display:column property="email" />
   <display:column property="status" />
   <display:column property="longDescription"
media="csv excel xml pdf" title="Not On HTML"/>
   <display:column media="csv excel" title="URL" property="url"/>
   <display:setProperty name="export.pdf" value="true" />
   <display:setProperty name="export.csv" value="false" />
   </display:table>
  
   十四、配置属性,覆盖默认
  
   两种方法:
  
   A、在程序classpath下新建displaytag.properties文件
  
   B、对于单个表格,应用<display:setProperty>标签
  
   具体可配置的属性:http://displaytag.sourceforge.net/configuration.html
  
   十五、一个完整的例子
  
   <display:table name="test" export="true" sort="list" pagesize="8">
   <display:column property="city" title="CITY" group="1"
sortable="true" headerClass="sortable"/>
   <display:column property="project" title="PROJECT"
group="2" sortable="true" headerClass="sortable"/>
   <display:column property="amount" title="HOURS"/>
   <display:column property="task" title="TASK"/>
   </display:table>
  
   sort="list" 对整个list进行排序
  
   导出数据到其他格式时,group无效

=====================第二篇===================================

DisplayTag七宗罪

最近比较乱,很长时间没更新空间了,正好今天有话题,准备更新下^_^
Display Tag Lib是一个标签库,主要用来处理jsp网页上的Table,功能非常强,可以对的Table进行分页、数据导出、分组、对列排序等等,而且使用起来非常的方便,能够大大减少代码量.
记得有N多朋友问过分页问题如何可以更加方便、快速的处理,我的回答好象每次都是"DisplayTag",然后步骤相同的向朋友讲它有什么功能、能减少多少编码量、发文档、如何看war例子.以至于当时都想把操作过程录下来,来降低我的口水消耗量.
俗话说得好"路遥知马力",经过不断的使用,感觉DisplayTag"肾虚"了,问题与缺陷越来越多.现在还在使用它的朋友,如果已经放弃不用,那么就别浪费时间看这个了;如果还在使用的朋友,最好能看看我总结的DisplayTag罪状,倒能弥补些缺陷,不至于问题出现时记恨在下.呵呵.
1.中文翻页、排序问题:对于中文无法翻页、排序,最简单的办法是修改Tomcat下的server.xml文件.找到HTTP的Connector标签,在里面添加一项URIEncoding="...",引号里面的内容取决于你的页面编码,比如可以是GBK,UTF-8等.
2.分页数据加载问题:DisplayTag的分页机制是这样的,它把所有的数据放入集合中,然后再进行分页处理.这样在数据量比较大的情况下,很容易造成性能下降或者内存超支等问题.目前解决方法有两个,一是在<displaytag>中增加两个属性:partialList="true"size="resultSize",每次只加再当前页数据.还有就是实现 org.displaytag.pagination.PaginatedList接口,自定义分页算法.个人推荐第二种,详细的实现方法可参考DisplayTag 1.1所带的例子.
PS:第二种方法还不完善,DisplayTag中仍存在一些Bug.
3.导出中文Excel问题:当导出中文列表名和中文表格数据Excel时,会产生乱码现象.
解决:
更改配置文件displaytag.properties,使用displaytag-export-poi.jar包.更改export.excel.class=org.displaytag.export.ExcelView为export.excel.class=org.displaytag.excel.ExcelHssfView,这样可以解决中文表格数据的问题.对于中文列表名乱码的问题,必须更改org.displaytag.excel.ExcelHssfView源代码:
old:
HSSFCell cell = xlsRow.createCell((short) colNum++);
cell.setCellValue(columnHeader);
cell.setCellStyle(headerStyle);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
new:
HSSFCell cell = xlsRow.createCell((short) colNum++);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(columnHeader);
cell.setCellStyle(headerStyle);
还有一种通过修改编码方式来支持中文的方法,那就是将org.displaytag.export.ExcelView.java中的getMimeType()方法内容修改为return "application/vnd.ms-excel;charset=GB2312";但是这样修改后,导出速度将会非常慢,呵呵.
4.decorator内容无法导出问题和Html标签导出问题:如果对table进行了decorator,那么decorator后的内容将无法导出.目前此问题无法解决.所以最好不用decorator.如果显示的内容使用了html标签进行了修饰,那么它会将html标签一起导出.也是没有什么好的解决方法.
5.导出Excel兼容性问题:有时会出现兼容性问题,导出的Excel在Office 2003下打不开.
PS:导出问题不少,尤其是Excel.建议使用Apache POI自己实现Excel的导出.
6.同页面使用多个displayTag翻页问题.DisplayTag翻页时,页面上所有的displayTag元素都翻页.解决办法:对页面中的每个表格,先判断它的记录是否为0,如果为0则不使用DisplayTag.
7.未知Bug比较多:正式发布版本总是存在很多Bug.在1.1版本发布时,居然分页算法出现了明显Bug,无语.


======================第三篇=====================================

displayTag的应用

displayTag作为当前还算得上比较流行的表现层工具插件,在sourceForge官方网站(http://displaytag.sourceforge.net/)上,平均每天的访问量数以万计,本文是建立在实际开发过程中
碰到的导出excel报表的实际需求,所获得的一些学习心得与技巧与大家分享.
默认的displayTag导出的Excel格式会有中文乱码,网上大部分文章都说只有改一下,org.displaytag.export.ExcelView类中,
public String getMimeType()
{
return "application/vnd.ms-excel"; //$NON-NLS-1$
}
方法,在方法后面追加;chartset=gbk;其它不尽然,如果这样改的话在tomcat作为web服务端的话,如果列表中有中文,很慢很慢才会有导出(不过,我至今尚未在tomcat下导出过中文),
把WEB应用布署在JBOSS下面,导出的话,如果数据量大的话也会有20-40秒不等,后来到displayTag的官网上,去看它的bugtrack,发现其实不尽然。其它displayTag如果在你需要导出excel并且想自已利用apache的
POI的话,要再去到官方网上下载一个displaytag-export-poi-1.1.jar的包,详细操作请看http://displaytag.sourceforge.net/11/install.html

其中里面谈到,如果,每次导出的excel数据总是有缓存的话,可以在web.xml文件中加入如下配置进行过滤,这样就可以导出实时数据了。
Configure the Filter in your web.xml:

<filter>
<filter-name>ResponseOverrideFilter</filter-name>
<filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
</filter>And add mappings for the pages that you will intercept, for example:

<filter-mapping>
<filter-name>ResponseOverrideFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ResponseOverrideFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

从以上内容来看,也只是告诉你,如果要用apache的最新的POI的话,需要把displaytag-export-poi-1.1.jar从官网下载下来,放入你的工程文件中,
并没有说如何调用写自己的所需的excel的报表格式.下面就实际问题,来讨论一下如何让displayTag导出自己所需的excel格式.
在displayTag所提供的接口类中,导出自已所需的Excel有两种方式,一种是通过指定的excel模板,一种是对excel的所有的格子,一个个样式的处理,
后一种方式完全体现了“慢工出细活”的格言,而前一种方式实现起来显然要好用得多,只用读模板的样式就行了。如何调用displayTag对导出自定制的Excel文件
所提供的接口呢,请看下文,(不要急噢!^_^)
要调用displayTag给Poi所提供的接口操作步骤如下:
1,先要在你的appfuse工程中新建一个类,让其实现org.displaytag.export.BinaryExportView接口,其中关键的方法是
public void doExport(OutputStream out) throws JspException {
String captionvalue = this.model.getCaption();
// ExcelHssfView1 tempExcelView=new ExcelHssfView1();
// try {
// BeanUtils.setProperty(tempExcelView, "action",captionvalue);
// } catch (IllegalAccessException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (InvocationTargetException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
if (captionvalue != null) {
captionvalue = captionvalue.replaceAll("(\\r)|(\\n)|(\\t)", "");

doExportCommon(out);


} else {
System.out.println("exec Common");
doExportCommon(out);
}
}
对这个方法按照你的POI的定制excel报表的的方法,然后实现它,再把内容写入outputStream中去,基本上就可以了,当然如果有上面的

this.model.getCaption()是读取displayTag的页面标签<displayTag:caption/>标签中的内容,可以在不同的JSP页面放入不同的caption的值
从而判断调用不同的方法,生成不同的excel样式的报表,灵活性兼而有之.
写完以上类以后,最好先写个测试方法,用main或junit工具都成,看看你的调用poi的逻辑有没有问题。
当以上的类及方法写完后,就要在你的appfuse工程中找displaytag.properties文件了,一般就在web/class/目录下,找到后,打开此文件,添加如下一段配置:
export.excel.class=org.displaytag.export.excel.ExcelHssfView1
后面一段是你的新建的类的文件的路径
因为是多国语言系统,所以最好把display_en.properties及display_zh_Cn.properties都加上.
到此就完成了,使用自己的POI来在appfuse中导出指定格式样式的excel文件.先别急噢,还有更精彩的等着你。这个时候又有一个问题来了,如果你
页面想要显示某些列表字段列,而导出的excel文件中又不出现这样的字段,又该如何处理呢,嘿嘿,请接着看下文。
如果要实现以上功能请如下操作:
1,调整页面上的displayTag标签的参数值,呵,比如:

<display:table name="testList" cellspacing="0" cellpadding="0" requestURI="" sort="list"
id="testList" pagesize="5" class="table testList" export="true"
defaultsort="1" defaultorder="descending" >
<display:caption media="excel">ExportByCommon</display:caption>
<display:column title="ID" sortable="true" media="html">
<a href="/aaa.html?id=<c:out value="${testList.id }" /> "
target="operationFrame">
<c:out value="${testList.id }" />
</a>

</display:column>
<display:column title="Status" sortable="true" media="html">
<img src="<c:out value="${testList.status}" />.gif" title="<c:out value="Status:${testList.status}" />">
</display:column>

<display:column property="remarks" escapeXml="true" sortable="true"
title="Remarks" style="word-wrap: break-word;word-break: break-all; width:90px;"/>
<display:footer media="excel">
<c:out value="${aa }"></c:out>|
<c:out value="(${bb })"></c:out>|
<c:out value="${currentDate }"></c:out>
</display:footer>
<display:setProperty name="item_name" value="Info"/>
<display:setProperty name="items_name" value="Infos"/>
<display:setProperty name="export.excel" value="true" />
<display:setProperty name="export.excel.filename" value="<%=exportFileName%>"/>
<display:setProperty name="export.csv" value="false" />
<display:setProperty name="export.xml" value="false" />
<display:setProperty name="export.pdf" value="false" />
</display:table>
</form>
注意上面用了多种配置需求,可以自已加链接,自定义导出名,自定义表头表尾,自定义是否全排序,自定义样式等,这些网上都有,就不细说了,
关键的需求点media的配置参数噢,如果media="excel"表示只在excel中显示,如果media=html表示仅在页面出现,没有此参数是两个都显示噢
其它的格式也类同设置,到此displayTag的点点心得分享与大家完毕,谢谢大家花费时间分享我的快乐!^_^
噢,上文提到中文问题,用POI后就解决了!


==============================第四篇=============================
displaytag-1.1.1之中文(乱码)解决方案
1,displaytag页面的汉化:
把displaytag.properties考到项目里,同时复制一份displaytag.properties,修改文件名displaytag_zh_CN.properties,把文件里面的对应条目改成中文即可
同时,文件里的对应两条配置注意选择合适的使用,下面是struts的配置
locale.provider=org.displaytag.localization.I18nStrutsAdapter
locale.resolver=org.displaytag.localization.I18nStrutsAdapter

2,excel导出中文内容乱码:
重载类org.displaytag.export.ExcelView,复写
public String getMimeType(){
      return "application/vnd.ms-excel;charset=gbk"; //$NON-NLS-1$
}
原代码是return "application/vnd.ms-excel"; //$NON-NLS-1$
修改displaytag_zh_CN.properties中对应条目:
export.excel.class=yourpackage.SimpleChineseExcelView

3,Excel导出文件名中文乱码:
重载类org.displaytag.tags.SetPropertyTag,复写
private String value;
public void setValue(String propertyValue){
try{
    this.value = new String(propertyValue.getBytes("GBK"),"ISO-8859-1");
}catch(Exception e){
    this.value = propertyValue;
}
super.setValue(this.value);
}
修改displaytag.tld对应条目
<name>setProperty</name>
<!-- <tag-class>org.displaytag.tags.SetPropertyTag</tag-class> -->
<tag-class>yourpackage.SimpleChineseSetPropertyTag</tag-class>
在jsp中应用时
<display:setProperty name="export.excel.filename" value="导出中文名称.xls"/>
注意,这种解决方案只能解决value的中文名称,而不能解决bodycontent内的中文名称,如
<display:setProperty name="export.excel.filename">导出菜单.xls</
display:setProperty>

4,Excel导出文件名中文乱码bodycontent中的不完美解决方案

<display:setProperty name="export.excel.filename">
<%=new String("导出菜单.xls".getBytes("GBK"),"ISO-8859-1") %>
</display:setProperty>
这种解决方案之所以称之为不完美适应为它要借助页面中的java代码实现

使用Mesources
<display:setProperty name="export.excel.filename">
<%
MessageResources mrs = (MessageResources)request.getAttribute("org.apache.struts.action.MESSAGE");
String fileName = mrs.getMessage("menu.export.excel.filename");
fileName = new String(fileName.getBytes("GBK"),"ISO-8859-1");
out.print(fileName);
%>
</display:setProperty>

谁有好的解决方案可以回帖~~感激不尽~


Hibernate和displayTag 完美分页3步曲

displaytag 中的分页对于数据量不大来说是很好的,只需要简单的配置就可以做出来强大的功能,但是要注意的是分页链接的编码问题。我们知道的,这样的分页模式在数据量大时,对于性能来说是个问题,毕竟将大量的数据一次性取出来,而用到的只有少数,不是很好的选择,而Hibernate强大的分页功能,对于我们来说再简单不过了,但是却不知道如何2者结合起来使用?

下面就是一个很好的例子:只需要3部。

1) Add partialList="true" size="resultSize" to the display tag in your jsp file like so:

<display:table name="collection" cellspacing="0" cellpadding="0" requestURI=""
     defaultsort="1" id="c" pagesize="25" partialList="true" size="resultSize" class="list" export="false">




2) Modify your action file by adding a method which gets the page number from the request

public final class DisplayTagAction extends BaseAction {

   public ActionForward execute(ActionMapping mapping, ActionForm form,
       HttpServletRequest request, HttpServletResponse response)
       throws Exception {
     if (log.isDebugEnabled()) {
       log.debug("Entering 'execute' method");
    }

   TestDataManager amgr = (TestDataManager) getBean("testDataManager");

        //get the page number from request
         int page = getPage(request);
         int size = 25;
        
        //pass in page and size
         request.setAttribute("collection", amgr.getTestData(page, size);

        //get the total size of collection , required for display tag to get the pagination to work
         request.setAttribute("resultSize", new Integer(amgr.getTestDataSize()));

   return mapping.findForward("displayTagPage");

  }
  

     public int getPage(HttpServletRequest request){
       int page=0;
         Enumeration paramNames = request.getParameterNames();
         while (paramNames.hasMoreElements()) {
             String name = (String)paramNames.nextElement();
             if (name != null && name.startsWith("d-") && name.endsWith("-p")) {
                 String pageValue = request.getParameter(name);
                 if (pageValue != null) {
                    page = Integer.parseInt(pageValue)-1;
                }
            }
        }
         return page;
    }




3) Modify the data access call to return a paginated list.

    public List getTestData(int page, int pageSize){
  
         Query query = getSession().createQuery("from Test");
         return query.setFirstResult(page * pageSize).setMaxResults(pageSize+1).list();
   }

    public int getTestDataSize() {

         return ((Integer)getSession().createQuery("select count(*) from Test").uniqueResult()).intValue();
   }

 

发表于 @ 2009年01月17日 19:08:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:关于Freemarker生成静态html文件及中文乱码的问题 | 新一篇:SiteMesh

  • 发表评论
  • 评论内容:
  •  
Copyright © it_man
Powered by CSDN Blog