1. 下载displaytag-1.1-bin.zip后解压缩并将displaytag-examples-1.1.war中的WEB-INF/lib类包放入自己的web应用程序中的WEB-INF/lib目录下,并将WEB-INF/classes中的displaytag.properties放入到自己web应用程序中的WEB-INF/classes目录下。
2. 将displaytag-examples-1.1.war中的资源文件放置到与自己web应用程序同级的目录中,资源文件包括css,images,img三个文件夹下的所有内容。
1、 得到要显示的数据源
有四种范围
pageScope
requestScope (默认) <display:table name="test" >
sessionScope <display:table name="sessionScope.sessiontest" > 注意,这里要指定范围
<% request.setAttribute( "test", new TestList(20, false) ); %>
标签将遍历List里的每一个对象,并将对象里的所有属性显示出来。
<% request.setAttribute( "test", new TestList(20, false) ); %>
共有的表格样式为isis,its,mars,simple,report,mark五种,默认为isis
5、 数据的自动连接功能
如果显示的数据中包含emal和ur时,可以通过设定display:column里的autolink="true"来直接连接
6、 数据的排序
在需要排序的column里增加sortable="true"属性,headerClass="sortable"是指定显示的样式。
defaultsort="1" 默认第一个column排序
defaultorder="descending" 默认递减排序
<display:table name="test" 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>
7、 数据的动态连接
实现数据的动态连接有两种方法。第一种为使用标签库的属性值来设置连接地址,这种方法实现的动态连接比较简单,只能实现类似 xxx.jsp?id=1的连接样式。第二种方法为通过自定义一个Wrapper类继承TableDecorator来实现表格中动态连接的数据内容,这样就可以实现类似xxx.jsp?id=1&action=add的连接样式。
第一种动态连接使用方法:在<display:column/>里通过增加href、paramId、paramName、paramScope、paramProperty属性
href 基本的URL 地址
paramId 加在URL 地址后的参数名称
paramName 数据bean的名称,一般为null(即使用当前List里的对象)
paramScope 数据bean的范围,一般为null
paramProperty 数据bean的属性名称,用来填充URL 地址后的参数值
<display:column property="id" title="ID" href="details.jsp" paramId="id" />
</display:table>
第二种动态连接使用方法:首先编写MyWrapper.java文件,代码如下
import org.displaytag.decorator.TableDecorator;
public class MyWrapper extends TableDecorator{
return "<a href=/"details.jsp?id=" //$NON-NLS-1$
然后编写jsp页面,首先在页面中import一下自己定义的MyWrapper,在<display:table>中增加decorator=” MyWrapper”属性,在数据显示的列种添加
三、 备注说明
此文档只列举了一些经常用到的表格显示例子,其他的功能暂没进行详细列举。
<style type="text/css" media="all">
注意 如果上面的CSS加载不到,请确认CSS路径是否正确
=====================================================================================================
DisplayTag在表格数据显示,排序,生成报表,分页,包括数据的格式化有着强大的功能。使用DisplayTag可以使得程序的前台开发更容易,更方便。很多的功能可以通过官方网站来获得相关的信息。
因为自从DisplayTag在去年发布以后,到现在没有新的版本,所以在程序的开发过程中,有一些限制,好在都有相关的方法进行替代。
Multiple Parameters:
一般的程序在DisplayTag构造link,都需要传递多个参数,当使用Decorator的时候,未免会给程序的维护带来很大的困难,DisplayTag在使用 paramId在传递参数的时候只能传递一个参数,这给大多数的程序处理带来了不便,可以通过修改Column类中的private Href getColumnHref(String columnContent) throws ObjectLookupException方法来达到目的,很多人已经提出相关的解决方案,见http://jira.codehaus.org/browse/DISPL-120
但是毕竟没有官方的release版本,这样同样对以后的维护带来不便。最快也是最简洁的办法就是通过JSTL来构造link,这种方法不再限制只能传递一个参数,给程序的处理带来了方便。使用Struts2 , JSTL和DisplayTag结合,构造link会使程序更易维护。下面是简短的JSTL和DisplayTag结合在一起的方法。
<display:table name="jobz" class="simple" id="row" >
<display:column titleKey="label.global.actions" >
<c:url var="viewurl" value="/viewJobDetail.action">
<c:param name="name" value="${row.name}"/>
<c:param name="groupName" value="${row.group}"/>
</c:url>
<c:url var="exeurl" value="/viewJobDetail.action">
<c:param name="name" value="${row.name}"/>
<c:param name="groupName" value="${row.group}"/>
<c:param name="executeJobAction" value="execute"/>
</c:url>
<c:url var="editurl" value="/viewJobDetail.action">
<c:param name="name" value="${row.name}"/>
<c:param name="groupName" value="${row.group}"/>
<c:param name="editAction" value="edit"/>
</c:url>
<a href='<c:out value="${viewurl}"/>'><fmt:message key="label.global.view"/></a> |
<a href='<c:out value="${editurl}"/>'><fmt:message key="label.global.edit"/></a> |
<a href='<c:out value="${exeurl}"/>'><fmt:message key="label.global.execute"/></a>
</display:column>
<display:column property="group" titleKey="label.job.group" sortable="true" />
<display:column property="name" titleKey="label.job.name" sortable="true" />
<display:column property="description" titleKey="label.job.description" />
<display:column property="jobClass" titleKey="label.job.jobClass" sortable="true" />
</display:table>
通过TableID,我们可以或得相关的数据的值,并动态的生成相关的连接,
<display:table id="hello" requestURI="hello.action" pagesize="10">
<display:column title="Entity">
<c:url var="exeurl" value="/other.action">
<c:param name="entityName" value="${hello.entity}"/>
</c:url>
<a onclick="highlightElem(this,'hello')" target="myFrame" class="linkBlue" href='<c:outvalue="${exeurl}"/>'><c:out value="${hello.entity}"/>
</a>
</display:column>
<display:table/>
DisplayTag 分页
DisplayTag在分页的时候,Url会出现诸如d-8271310-p=3这样的参数,d-8271310-p是通过Encode tableID(一个String型的常量)产生的。如果我们需要维护页面的page的状态,这一点很重要。下面是相关的代码。
HttpServletRequest request=(HttpServletRequest)ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
String pageNo=request.getParameter((new org.displaytag.util.ParamEncoder(tableID).encodeParameterName(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE)));
我们就可以获得pageNo 3了, neworg.displaytag.util.ParamEncoder(tableID).encodeParameterName(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE))会生成像d-8271310-p这样的参数.