1. 程式人生 > >displaytag的使用方法(用於資料表格的顯示和功能控制)Displaytag1.1版本使用方法

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" > 注意,這裡要指定範圍   
  applicationScope 同上 2、 全部資料顯示
<% 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" >
      <display:column property="id" title="ID"/>          <display:column property="name" title="姓名" />       <display:column property="email" title="電子郵件"/>       <display:column property="url" title="網址"/>          <display:column property="money" title="Money"/>   </display:table>
  property對應List裡物件的屬性(用getXXX()方法取得),title則對應表格表頭裡的列名。 4、 表格的樣式定義
共有的表格樣式為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> &nbsp;
  </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這樣的引數.