①para_mana_Display标签

[color=red][size=large]概要:本文详细介绍了Display标签的使用方法.[/size][/color]

Display Tag是一套开源的定制标签库(表格显示标签),它提供了高级web显示模板,用来处理jsp网页上的表。

它可以处理表的列的显示、排序、分页、分组、裁剪、智能链接、导出和使用定制的xhtml样式装饰表格。

[color=red]-----------------------------------------------------Ready!---------------------------------------------------[/color]
使用Display标签需要用到下面所列jar文件
[color=red]【必须】[/color]Commons-beanutils、Commons-collections、Commons-lang、Commons-logging

Display Tag的官方网站:[url]http://displaytag.sourceforge.net/[/url]
下载地址:[url]http://displaytag.sourceforge.net/10/downloads.html[/url]

相关辅助包
下载地址:[url]http://displaytag.sourceforge.net/10/dependencies.html[/url]
[color=red]------------------------------------------------------------------------------------------[/color]

[color=red]-----------------------------------------------------Go!!!----------------------------------------------------[/color]
[color=blue]①将jar包放到WEB-INF的lib文件夹下[/color]
[color=blue]②在web.xml下添加一个filter[/color]
<filter>
<filter-name>exportFilter</filter-name>
<filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
</filter>
[color=blue]③ 在jsp页面做一个引用[/color]
<%@ taglib prefix="display" uri="/WEB-INF/tld/displaytag-11.tld" %>


[color=blue]④定义一个List[/color]
<%
List test = new ArrayList( 6 );
test.add( "Test String 1" );
test.add( "Test String 2" );
test.add( "Test String 3" );
test.add( "Test String 4" );
test.add( "Test String 5" );
test.add( "Test String 6" );
request.setAttribute( "test", test );
%>

当我们想在jsp页面上显示这个list时,我们只需要写一句话
<display:table name="test" />
标签遍历List里的每一个对象,并将对象里的所有属性显示出来。一般用于开发的时候检查对象数据的完整性。

如果list是从控制层抛出来的,name可使用EL表达式表示【jstl和standard包用于EL表达式】
<display:table name="${test}" />

[color=blue]⑤更多功能[/color]

[color=darkred]A 列的显示[/color]
<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属性来定义更加快速和利于排序。

[color=darkred]B 显示部分数据[/color]
显示开始五条数据:通过设定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>

[color=darkred]C 使用装饰模式转换数据显示[/color]
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,然后‘油漆’

[color=darkred]D 表格显示样式的定义[/color]
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)直接修改


[color=darkred]E 通过增加id属性创建隐含的对象[/color]
<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>


[color=darkred]F 排序[/color]
在需要排序的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都进行排序

[color=darkred]G 分组[/color]
只是需要在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>


[color=darkred]H 对email和url地址的直接连接[/color]
<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"来直接连接

[color=darkred]I 智能链接[/color]
有两种方法创建智能连接:

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>";
}


[color=darkred]J 导出数据到其他格式[/color]
在<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>

[color=darkred]K 配置属性,覆盖默认[/color]
两种方法:
A、在程序classpath下新建displaytag.properties文件
B、对于单个表格,应用<display:setProperty>标签

具体可配置的属性:[url]http://displaytag.sourceforge.net/configuration.html[/url]


[color=blue]⑥一个完整的例子[/color]

<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无效


[color=red]⑦补充[/color]
1.DisplayTag标签库概述

DisplayTag标签库是非常容易使用,而且功能强大,它包含了一下标签:

(1)<display:caption></display:caption> 它的作用相当于html页面的<title>标签。

(2)<display:column></display: column > 显示表格中的一个行对象的一个属性。

(3)<display:footer></display: footer > 嵌套在<display:table>标签中,在表格的最后一行数据之后显示的信息。

(4) <display:table></display: table > 应该可以知道这是我们DisplayTag标签库中最重要最核心的标签,上面的标签都是嵌套在它里面来使用的。其核心作用是将给定的对象以html表格形式来显示,根据<display:column>标签格式化每一个项。



2.Table标签
像html中<table>一样来显示并格式化列表。使用列表属性来指定某个范围内的数据集合,以供操作,支持将已经格式化的数据导出到CSV、EXCEL或者是XML中去。列表中的数据可以排序,并且列表可以按照需要进行分页显示。

示例:

<display:table name="someList" export="true" id="row" requestURI="MyAction.do">

<display:column sortable="true" title="ID"> <c:out value="${row.id}"/>

</display:column>

<display:column property="email" autolink="true"/>

<display:column property="description" title="Comments"/>

</display:table>



属性说明:

cellpadding : 等同于html页面中<table>中的属性

cellspacing : 等同于html页面中<table>中的属性

class : 等同于html页面中<table>中的属性

decorator : 由TableDecorator的子类中指定的操作来对整个列表进行修饰。

defaultsort : 列的默认索引排序,从1开始。

ExcludedParams : 由空白分开的列表,包含参数指定的名字,将不会进行分页或者排序,可以使用excludedParams=”*”来匹配任何参数。

export : 导出允许或禁止,有效值为true或false。

frame : 等同于html页面中<table>中的属性

Htmlid : 等同于html页面中<table>中的id属性。

id :参见uid。这个id属性不可以使用在jsp1.0,但是uid可以。

length : 记录可以显示的数量。

list : 在table中当作数据源的对象,可以是像requestScope.object.property这样的表达式。你必须定义要么是属性的名字或者是list属性。推荐使用”name”。

name : 在table中当作数据源的对象, 可以是像requestScope.object.property这样的表达式。在EL版本的标签库中,这必须是一个指定了源对象的EL表达式。

Offset : 第一条显示的记录索引。

pageSize : 一页中显示的记录数。

requestURI : 当前用以排序的链接,导出和分页,通过添加requestURI属性值的任何标签产生的参数


更多例子:[url]http://displaytag.homeip.net/displaytag-examples-1.1/index.jsp[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值