displaytag的使用方法(用於資料表格的顯示和功能控制)Displaytag1.1版本使用方法
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) ); %> <display:table name="test" ></display:table>
標籤將遍歷List裡的每一個物件,並將物件裡的所有屬性顯示出來。 name屬性用來對應list物件的名稱 3、 部分資料顯示
<% request.setAttribute( "test", new TestList(20, false) ); %> <display:table name="test" >
共有的表格樣式為isis,its,mars,simple,report,mark五種,預設為isis 表格樣式設定為mark後可以設定column的樣式屬性 <display:table name="test" class="isis" > <display:column property="id" title="ID"/> <display:column property="name" title="姓名" /> <display:column property="email" title="電子郵件" class="tableCellError"/> <display:column property="url" title="網址"/> <display:column property="money" title="Money"/> </display:table> 通過class屬性來指定所要應用的樣式。
5、 資料的自動連線功能
如果顯示的資料中包含emal和ur時,可以通過設定display:column裡的autolink="true"來直接連線 <display:table name="test" > <display:column property="id" title="ID"/> <display:column property="name" title="姓名" /> <display:column property="email" title="電子郵件" autolink="true" /> <display:column property="url" title="網址" autolink="true"/> <display:column property="money" title="Money"/> </display:table>
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:table name="test">
<display:column property="id" title="ID" href="details.jsp" paramId="id" /> <display:column property="email" title="電子郵件" href="details.jsp" paramId="action" /> <display:column property="url" title="網址" href="details.jsp" paramId="id" paramProperty="email" />
</display:table> 第一列的連線地址為details.jsp?id=1
第二種動態連線使用方法:首先編寫MyWrapper.java檔案,程式碼如下
import org.displaytag.decorator.TableDecorator; import com.module.DateModule; // DateModule為將來要在tag中進行顯示的資料bean。
public class MyWrapper extends TableDecorator{ public MyWrapper () { super(); } public String getLink2() { DateModule myModule = (DateModule) getCurrentRowObject(); int id = DateModule.getId().intValue();
return "<a href=/"details.jsp?id=" //$NON-NLS-1$ + id + "&action=view/">檢視</a> | " //$NON-NLS-1$ + "<a href=/"details.jsp?id=" //$NON-NLS-1$ + id + "&action=edit/">編輯</a> | " //$NON-NLS-1$ + "<a href=/"details.jsp?id=" //$NON-NLS-1$ + id + "&action=delete/">刪除</a>"; //$NON-NLS-1$ } }
然後編寫jsp頁面,首先在頁面中import一下自己定義的MyWrapper,在<display:table>中增加decorator=” MyWrapper”屬性,在資料顯示的列種新增 <display:column property="link2" title="Actions" />
三、 備註說明
此文件只列舉了一些經常用到的表格顯示例子,其他的功能暫沒進行詳細列舉。 關於此標籤的分頁功能說明:此標籤還有的功能包括實現對list的資料分頁,但是由於對海量資料支援的不完善性暫不介紹,在進行分頁的時候我們仍然用hibernate的分頁方法實現分頁,傳遞資料時只傳遞當前頁的List物件資料。 關於樣例程式的說明:在displaytag-examples-1.1.war中的例子基本上包含了所有displaytag所有能做到的效果顯示。其中所有例子都是基於JSP XML syntax這種格式的頁面檔案編寫的。當用普通的jsp頁面進行測試時應該在檔案頂部加入標籤庫資訊<%@ taglib uri="http://displaytag.sf.net/" prefix="display" %> 同時應當將標籤庫要用到的css樣式匯入到頁面中
<style type="text/css" media="all"> @import url("css/maven-base.css"); @import url("css/maven-theme.css"); @import url("css/site.css"); @import url("css/screen.css"); </style>
注意 如果上面的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了, new org.displaytag.util.ParamEncoder(tableID).encodeParameterName(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE))會生成像d-8271310-p這樣的引數.