天天看點

display tag 使用

       首先當然是要下載下傳它的jar包了,這裡可以下載下傳到最新的版本。将jar包放到WEB-INF的lib檔案夾下。另外還需要兩個輔助包:apache的commons-lang和standard包,更多的輔助包可以在這裡下載下傳。

在web.xml下添加一個filter

<filter>

<filter-name>exportFilter</filter-name>

<filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>

</filter>

在jsp頁面做一個引用:

<%@ taglib uri="http://displaytag.sf.net/el" prefix="display" %>

首先我們定義一個list

<%

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" />

display tag會自動生成一個table

如果list是從控制層抛出來的,name可使用EL表達式表示

<display:table name="${test}" />

這是最簡單的display tag的使用,我們可以給它加上樣式等,也可以定義顯示的列,下面的table顯示複雜一些

<display:table name="test" styleClass="list" cellspacing="0" cellpadding="0">

<display:column property="id" title="ID" class="idcol"/>

<display:column property="name" />

<display:column property="email" />

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

</display:table>

如果想要給它加個連結也很簡單,下面的代碼給name加了連接配接,并附帶id參數,email也自動連接配接到mailto:XXX

<display:column property="name" url="detail.jsp" paramId="id" paramProperty="id"/>

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

下面介紹幾個Display最常用的功能,更多功能請參考[url]http://displaytag.homeip.net/displaytag-examples-1.1/[/url]。

1. 分頁

如果想對代碼分頁,隻需在display:table标簽中添加一項pagesize="每頁顯示行數",如

<display:table name="test" pagesize="10"/>

2. 對列排序

display tag可對列進行排序,就是點選列名,對該列的資料進行排序。你隻需對想要排序的列添加 sort="true" 就OK,如下面的代碼可對前三列進行排序。在display:table中添加defaultsort="列數",可預設對指定的列排序。

<display:table name="test" styleClass="list" cellspacing="0" cellpadding="0" defaultsort="1">

<display:column property="id" title="ID" class="idcol" sort="true"/>

<display:column property="name" url="detail.jsp" paramId="id" paramProperty="id" sort="true"/>

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

如果table有分頁,Display Tag預設隻對目前頁進行排序,如果想對整個list排序,可以在display:table之間添加一段代碼:

<display:setProperty name="sort.amount" value="list"/>

3. 導出資料

在display:table中添加export="true",看看會出現什麼!Display Tag預設會提供三種資料導出方式:CSV、Excel、XML 。

另外Display Tag還可以導出為PDF格式,在[url]http://prdownloads.sourceforge.net/itext/[/url]下載下傳一個輔助包iText.jar,copy到lib目錄下,然後在display:table之間添加一段代碼:

<display:setProperty name="export.pdf" value="true"/>,大功告成。

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還有一些很實用的小功能,這裡提兩個。一個是對資料的Format,這是1.1版本添加的新功能,可以使用标簽的方式格式化時間、數字、字元串。比如日期,在需要格式化的column标簽中添加format="{0,date,yyyy-MM-dd}",第一個參數為格式化的資料序号,第二個參數是資料類型,數字為number,第三個參數為資料格式。

另外一個功能是對table資料的合計功能。在table标簽中添加 decorator="org.displaytag.decorator.TotalTableDecorator",然後在想要進行合計的資料列的 column标簽中添加 total="true",該列就可以被計算總數了。但這個功能有個缺點,不能用在有分頁的時候,它隻能合計第一頁的資料。

DisplayTag的不足

初次使用DisplayTag的人可能會覺得驚喜,但是用久了會發現很多問題,最大的問題是對中文的支援不好,比如如果查詢條件中有中文,就無法翻頁,無法對中文排序,将中文導出為指定檔案時出現亂碼等等。這些問題有時候會讓人很郁悶,有時候逼得你要去修改它的源代碼。下面是對以上幾個問題的解決方法:

1. 對于中文無法翻頁、排序,最簡單的辦法是修改Tomcat下的server.xml檔案。找到HTTP的Connector标簽,在裡面添加一項 URIEncoding="...",引号裡面的内容取決于你的頁面編碼,比如可以是GBK,UTF8等。這樣上面兩個問題就可以解決了。

2. 導出為檔案:其實這個功能除了中文支援外還有很多其它問題,比如它會将Html标簽一起導出、隻導出顯示的内容,但如果對table進行了 decorator,decorator後的内容無法導出。如果想要将中文正确導出,需要修改DisplayTag源代碼。

下載下傳相同版本的源代碼,在org.displaytag.export.ExcelView.java檔案中找到getMimeType()方法,将此方法修改為 return "application/vnd.ms-excel;charset=GB2312";,修改後導出資料的速度會慢很多,不過将就吧。

3. 新版的DisplayTag1.1添加了對一次取部分資料的支援,相關的标簽包括partialList和size,需要設定partialList="true"和size的大小。具體怎麼用偶還沒研究。

繼續閱讀