Display Tag Lib是一個標籤庫,用來處理jsp網頁上的Table,功能很是強,能夠對的Table進行分頁、數據導出、分組、對列排序等等,反正我在作項目時須要的功能它都給我提供了,並且使用起來很是的方便。可以大大減小代碼量。
介個是Display Tag的官方網站http://displaytag.sourceforge.net。
首先固然是要下載它的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:table name="test" styleClass="list" cellspacing="0" cellpadding="0">
<display:column property="id" title="ID" class="idcol"/>
<display:column property="name" url="detail.jsp" paramId="id" paramProperty="id"/>
<display:column property="email" autolink="true"/>
<display:column property="description" title="Comments"/>
</display:table> html
下面介紹幾個Display最經常使用的功能,更多功能請參考http://displaytag.homeip.net/displaytag-examples-1.1/。
1. 分頁
若是想對代碼分頁,只需在display:table標籤中添加一項pagesize="每頁顯示行數",如
<display:table name="test" pagesize="10"/> java
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"/>
<display:column property="description" title="Comments"/>
</display:table>
若是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格式,在http://prdownloads.sourceforge.net/itext/下載一個輔助包iText.jar,copy到lib目錄下,而後在display:table之間添加一段代碼:
<display:setProperty name="export.pdf" value="true"/>,大功告成。 web
4. Display Tag的屬性設置
前面所說的display:setProperty 是一種改變Display Tag屬性的方法,可是在每一個jsp中都要寫太麻煩了。
Display Tag中設置了不少默認的屬性,它有一個專門的屬性文件,是在它的jar包中的displaytag/properties/TableTag.properties
想要改變它的默認屬性,咱們能夠在WEB-INFclasses下新建一個文件displaytag.properties,仿照TableTag.properties中屬性的格式設置須要修改的屬性。
TableTag.properties中的# messages中設置的是顯示在頁面上的提示信息。默認是英文的,咱們能夠把它改成中文的。不過這裏只能使用unicode,就是說中文字符必須轉換爲unicode碼,這個可使用jdk自帶的native2ascii.exe進行轉換。 apache
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的大小。 app
原文:http://qsfwy.iteye.com/blog/469357 jsp