介绍一种一览画面自动分页、排序的标签 displaytag
Display Tag Lib是一个标签库,用来处理jsp网页上的Table,功能非常强,可以对的Table进行分页、数据导出、分组、对列排序等等,能够大大减少代码量。
这个是Display Tag的官方网站http://displaytag.sourceforge.net。
首先当然是要下载它的jar包了,http://displaytag.sourceforge.net/10/downloads.html可以下载到最新的版本,也可以去本网站文件列表中去下载,文件名为displaytag-1.1.1.jar。将jar包放到WEB-INF的lib文件夹下。另外还需要两个辅助包:apache的commons-lang、jstl和standard包,更多的辅助包可以在http://displaytag.sourceforge.net/dependencies.html下载,本网站文件列表中也有下载。
首先在web.xml下添加一个filter
exportFilter
org.displaytag.filter.ResponseOverrideFilter
其次在jsp页面做一个引用:
<%@ taglib uri=”http://displaytag.sf.net/el” prefix=”display” %>
再次在jsp中写如下代码
<display:table id="mtable" name="sessionScope.menus" requestURI="" pagesize="4" defaultsort="1">
<display:column property="menuid" title="menuid" sortable="true" ></display:column>
<display:column property="menunane" sortable="true" title="menunane" ></display:column>
<display:column property="parent.menunane" title="parentmenuname" ></display:column>
<display:column property="url" title="url" ></display:column>
</display:table>
其中sessionScope.menus为需要在jsp页上显示数据的集合,因为此数据需要分页,所以要将其放在session中,但在本标签中要写sessionScope,menus为数据集合。property=”“中的名字要与javaBean中的变量名一致才可以取得正确的数据。requestURI=”“必须要有,否则在struts2.0中无法找到返回页面,会报404错误。
1. 分页
如果想对代码分页,只需在display:table标签中添加一项pagesize=”每页显示行数”,如
<display:table id="mtable" name="sessionScope.menus" requestURI="" pagesize="4" defaultsort="1">
2. 对列排序
display tag可对列进行排序,就是点击列名,对该列的数据进行排序。你只需对想要排序的列添加 sortable=”true” 就OK,如上面面的代码可对前两列进行排序。在display:table中添加defaultsort=”列数”,可默认对指定的列排序。
如果table有分页,Display Tag默认只对当前页进行排序,如果想对整个list排序,可以在display:table之间添加一段代码:
3. 导出数据
在display:table中添加export=”true”,看看会出现什么!Display Tag默认会提供三种数据导出方式:CSV、Excel、XML 。
另外Display Tag还可以导出为PDF格式,在http://prdownloads.sourceforge.net/itext/下载一个辅助包iText.jar,copy到lib目录下,然后在display:table之间添加一段代码:
,大功告成。
4. 其它功能
DisplayTag还有一些很实用的小功能,这里提两个。一个是对数据的Format,这是1.1版本添加的新功能,可以使用标签的方式格式化时间、数字、字符串。比如日期,在需要格式化的column标签中添加format=”{0,date,yyyy-MM-dd}”,第一个参数为格式化的数据序号,第二个参数是数据类型,数字为number,第三个参数为数据格式。
另外一个功能是对table数据的合计功能。在table标签中添加 decorator=”org.displaytag.decorator.TotalTableDecorator”,然后在想要进行合计的数据列的 column标签中添加 total=”true”,该列就可以被计算总数了。但这个功能有个缺点,不能用在有分页的时候,它只能合计第一页的数据。
不足:
1.分页数据加载问题:DisplayTag的分页机制是这样的,它把所有的数据放入集合中,然后再进行分页处理.这样在数据量比较大的情况下,很容易造成性能下降或者内存超支等问题.目前解决方法有是在中增加两个属性:partialList=”true”size=”resultSize”,每次只加再当前页数据。
2.对于中文无法翻页、排序,最简单的办法是修改Tomcat下的server.xml文件。找到HTTP的Connector标签,在里面添加一项URIEncoding=”...”,引号里面的内容取决于你的页面编码,比如可以是GBK,UTF8等。这样上面两个问题就可以解决了。