- 論壇徽章:
- 0
|
Display Tag Lib是一個標簽庫,用來處理jsp網(wǎng)頁上的Table,功能非常強,可以對的Table進行分頁、數(shù)據(jù)導出、分組、對列排序等等,反正
我在做項目時需要的功能它都給我提供了,而且使用起來非常的方便。能夠大大減少代碼量。
介個是Display Tag的官方網(wǎng)站
http://displaytag.sourceforge.net
。
首先當然是要下載它的jar包了,這里可以下載到最新的版本。將jar包放到WEB-INF的lib文件夾下。另外還需要兩個輔助包:apache的commons
-lang和standard包,更多的輔助包可以在這里下載。
在web.xml下添加一個filter
exportFilter
org.displaytag.filter.ResponseOverrideFilter
在jsp頁面做一個引用:
首先我們定義一個list
當我們想在jsp頁面上顯示這個list時,我們只需要寫一句話
display tag會自動生成一個table
如果list是從控制層拋出來的,name可使用EL表達式表示
這是最簡單的display tag的使用,我們可以給它加上樣式等,也可以定義顯示的列,下面的table顯示復雜一些
如果想要給它加個鏈接也很簡單,下面的代碼給name加了連接,并附帶id參數(shù),email也自動連接到
[email=XXX]mailto:XXX[/email]
例子:
下面介紹幾個Display最常用的功能,更多功能請參考
http://www.displaytag.org/index.jsp
。
1. 分頁
如果想對代碼分頁,只需在display:table標簽中添加一項pagesize="每頁顯示行數(shù)",如
2. 對列排序
display tag可對列進行排序,就是點擊列名,對該列的數(shù)據(jù)進行排序。你只需對想要排序的列添加 sort="true" 就OK,如下面的代碼可
對前三列進行排序。在display:table中添加defaultsort="列數(shù)",可默認對指定的列排序。
如果table有分頁,Display Tag默認只對當前頁進行排序,如果想對整個list排序,可以在display:table之間添加一段代碼:
3. 導出數(shù)據(jù)
在display:table中添加export="true",看看會出現(xiàn)什么!Display Tag默認會提供三種數(shù)據(jù)導出方式:CSV、Excel、XML 。
另外Display Tag還可以導出為PDF格式,在
http://prdownloads.sourceforge.net/itext/
下載一個輔助包iText.jar,copy到lib目錄下,
然后在display:table之間添加一段代碼:
,大功告成。
4. Display Tag的屬性設置
前面所說的display:setProperty 是一種改變Display Tag屬性的方法,但是在每個jsp中都要寫太麻煩了。
Display Tag中設置了很多默認的屬性,它有一個專門的屬性文件,是在它的jar包中的displaytag/properties/TableTag.properties
想要改變它的默認屬性,我們可以在WEB-INF\classes下新建一個文件displaytag.properties,仿照TableTag.properties中屬性的格式設
置需要修改的屬性。
TableTag.properties中的# messages中設置的是顯示在頁面上的提示信息。默認是英文的,我們可以把它改為中文的。不過這里只能使用
unicode,就是說中文字符必須轉換為unicode碼,這個可以使用jdk自帶的native2ascii.exe進行轉換。
5. displaytag中decorator的使用原理
decorator有兩種,一種是用在displaytag:table中,一種是用在displaytag:column中,前者對整個表中相應屬性有效,后者對單個列有效。
所以,在前者中,你一定要在響應的decorator類中寫上get方法,命名方式為get+beanProperty(bean屬性),前者需繼承TableDecorator類
,后者只需實現(xiàn)ColumnDecorator類的decorate方法即可(return一個String)。
關于decorator的原理,是這樣的,當使用decorator屬性時,數(shù)據(jù)先從bean中被取出,然后被傳入進decorator,前者是在decorator類中調用g
etCurrentRowObject方法得到當前bean,繼而再調用bean的get方法將屬性取出
(
public String getDate()
{
return this.dateFormat.format(((ListObject) this.getCurrentRowObject()).getDate());
}
),
后者是數(shù)據(jù)直接被傳進其decorate方法.
當數(shù)據(jù)被處理完成后,再返回到頁面顯示,所以說,decorator類其實是將原有屬性的value進行包裝后輸出的包裝器,它的英文意思為油漆工
,也就是這個意思,這也是一種基本設計模式
但是如果碰到你想要輸出一個checkbox或者radio時,你可以覆蓋掉以前的輸入,直接輸出自己想要的東西,像這樣 :return " "; 那么你就
把輸入進包裝器的數(shù)據(jù)覆蓋成checkbox輸出了。
6. displaytag的翻頁機制
這可能是displaytag的局限性了,它的翻頁機制是這樣的:
如果一個list中有10000個bean,按照它的機制,如果是第一頁(每頁n條),它會把前n條數(shù)據(jù)取出來,然后再把剩余的10000-n條刪除,當你
點擊頁面“2”的時候,它再從后臺繞一圈,把第二頁的數(shù)據(jù),也就是把第n+1-2n條記錄取出來,把剩余的刪除。這樣,它實現(xiàn)了翻頁,又防止
了內存占用過大。
但是,不管怎么說,它還是有一個取出所有條數(shù)的動作的,在極大數(shù)據(jù)量的情況下,有可能造成內存溢出。
8. displaytag中decorator一例
后臺部分:
=======================================================
import org.displaytag.decorator.TableDecorator;
import java.util.HashMap;
import java.text.SimpleDateFormat;
import java.util.Date;
public class BulletinListDecorator extends TableDecorator{
private String bulletinId = null;
private String title = null;
private SimpleDateFormat sdf = null;
private int i = 0;
public BulletinListDecorator() {
sdf = new SimpleDateFormat("yy-MM-dd");
}
public String getBulletinId(){
i+=1;
return ""+i;
}
public String getTitle(){
bulletinId = (String)((HashMap) this.getCurrentRowObject()).get("bulletinId");
title = (String)((HashMap) this.getCurrentRowObject()).get("title");
return ""+title+"";
}
public String getLastPubD(){
return sdf.format((Date)((HashMap) this.getCurrentRowObject()).get("lastPubD"));
}
}
====================================================
前臺部分:
====================================================
decorator="com.ztesoft.ds.application.web.bulletin.decorator.BulletinListDecorator">
headerClass="ValueTd"/>
headerClass="ValueTd"/>
headerClass="ValueTd"/>
headerClass="ValueTd"/>
其中bulletinList是一個ArrayList,titleKey指向了properties文件
====================================================
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u3/109937/showart_2144175.html |
|