日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

displaytag 的使用

發布時間:2023/12/14 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 displaytag 的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

displaytag 的使用
displaytag的官方網站http://displaytag.sourceforge.net。
1.DisplayTag標簽庫概述
(1)概述
DisplayTag是一個開源的自定義標簽庫(Custom Tag lib),他提供了直接而有效的格式化web視圖層數據的有效手段??梢栽趙eb應用的MVC模式中集成DisplayTag到View層,其提供的強大表格格式化功能,用來處理jsp網頁上的Table,可以對的Table進行分頁、數據導出、分組、對列排序等等,能夠大大減少代碼量。
(2)常用標簽
(1) display:table</display: table >
DisplayTag標簽庫中最重要最核心的標簽,上面的標簽都是嵌套在它里面來使用的。其核心作用是將給定的對象以html表格形式來顯示,根據display:column標簽格式化每一個項
(2)display:column</display: column >
顯示表格中的一個行對象的一個屬性。
(3)display:footer</display: footer >?????
嵌套在display:table標簽中,在表格的最后一行數據之后顯示的信息。
(4) display:caption</display:caption>??
它的作用相當于html頁面的標簽。模仿的簡單標記的html標題標記。?表標記中使用它來顯示標題。

2.使用前的準備工作:
(1)添加所需的標簽包
commons-beanutils.jar
commons-collection.jar
commons-lang.jar
displaytag.jar
displaytag-export-poi.jar
itext.jar
jstl.jar
standard.jar
(2)在web.xml下添加一個filter

exportFilter
org.displaytag.filter.ResponseOverrideFilter

(3)在jsp頁面做一個引用:
<%@ taglib uri=“http://displaytag.sf.net/el” prefix=“display” %>

  • Display的常用功能:
    (1)表格顯示樣式的定義
    <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>
    property對應List里對象的屬性(用getXXX()方法取得),title則對應表格表頭里的列名。定義列有兩種方式:
      A、<display:column property=“email” />
      使用display:column/標簽里的property屬性來定義
      B、<display:column title=“email”>email@it.com</display:column>
      在display:column/標簽體里增加內容,可以是常量,也可以用其他標簽等等,用property屬性來定義更加快速和利于排序
    (2)標簽取得數據的數據源
    有四種范圍:
    pageScope
      requestScope (默認):<display:table name=“test2” >
      sessionScope:<display:table name=“sessionScope.holder.list” > 注意,這里要指定范圍,非默認
      applicationScope
    (3)通過增加id屬性創建隱含的對象
    <display:table name=“test” id=“testit”>
      <display:column property=“id” title=“ID” />
      <display:column property=“name” />
      <display:column title=“static value”>static</display:column>
    <display:column title=“row number (testit_rowNum)”>
    <%=pageContext.getAttribute(“testit_rowNum”)%></display:column>
    <display:column title="((ListObject)testit).getMoney()">
    <%=((ListObject)pageContext.getAttribute(“testit”)).getMoney()%></display:column>
    </display:table>
    注意到在display:table/里增加了id屬性,這時就在page context里創建了一個隱含對象,指向List里的當前對象,可以通過(ListObject)pageContext.getAttribute(“id”)來捕獲這個對象。同時還創建了一個id_rowNum對象,同樣,可通過pageContext.getAttribute(“testit_rowNum”)來捕獲,它僅僅代表當前行的行數。有了這兩個隱含對象,就可以通過其他標簽來訪問,例如Jstl:
      <display:table id=“row” name=“mylist”>
      <display:column title=“row number” >
      <c:out value="rowrowNum&quot;/&gt;&lt;/display:column&gt;&lt;display:columntitle=&quot;name&quot;&gt;&lt;c:outvalue=&quot;{row_rowNum}&quot;/&gt;   &lt;/display:column&gt;   &lt;display:column title=&quot;name&quot; &gt;   &lt;c:out value=&quot;rowr?owNum"/>  </display:column>  <display:columntitle="name">  <c:outvalue="{row.first_name}"/>
      <c:out value="${row.last_name}"/>
      </display:column>
      </display:table>
    (4)分頁
    <display:table name=“sessionScope.test” pagesize=“10”>
      <display:column property=“id” title=“ID” />
      <display:column property=“name” />
      <display:column property=“email” />
      <display:column property=“status” />
      </display:table>
    如果想對代碼分頁,只需在display:table標簽中添加一項pagesize=“每頁顯示行數”,如
    <display:table name=“test” pagesize=“10”/>
    (5)顯示部分數據
    顯示開始五條數據:通過設定length屬性
      <display:table name=“test” length=“5”>
      <display:column property=“id” title=“ID” />
      <display:column property=“email” />
      <display:column property=“status” />
      </display:table>
      顯示第三到第八條數據:通過設定offset和length屬性
      <display:table name=“test” offset=“3” length=“5”>
      <display:column property=“id” title=“ID” />
      <display:column property=“email” />
      <display:column property=“status” />
      </display:table>
    (6)對列進行排序
    display tag可對列進行排序,就是點擊列名,對該列的數據進行排序。你只需對想要排序的列添加 sort=“true” 就OK,如下面的代碼可對前三列進行排序。在display:table中添加defaultsort=“列數”,可默認對指定的列排序。
    如果table有分頁,Display Tag默認只對當前頁進行排序,如果想對整個list排序,可以在display:table之間添加一段代碼:
    <display:setProperty name=“sort.amount” value=“list”/>
    (7)導出數據
    在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”/>
    (8)對email和url地址的直接連接
    <display:table name=“test” >
      <display:column property=“id” title=“ID” />
      <display:column property=“email” autolink=“true” />
      <display:column property=“url” autolink=“true” />
      </display:table>
      如果要顯示的對象里包含email和url地址,則可以在display:column里直接設定autolink="true"來直接連接
    (9)使用裝飾模式轉換數據顯示
    A、對整個表格應用decorator
      <display:table name=“test” decorator=“org.displaytag.sample.Wrapper” >
      <display:column property=“id” title=“ID” />
      <display:column property=“email” />
      <display:column property=“status” />
      <display:column property=“date” />
      <display:column property=“money” />
      </display:table>
      org.displaytag.sample.Wrapper即自己寫的decorator,它要繼承TableDecorator類,看看它的一個方法:
      public String getMoney()
      {
      return this.moneyFormat.format(((ListObject) this.getCurrentRowObject()).getMoney());
      }
      很明顯,它通過父類的getCurrentRowObject()方法獲得當前對象,然后對其getMoney()方法進行‘油漆’
      B、對單獨的column應用decorator
      <display:table name=“test”>
      <display:column property=“id” title=“ID” />
      <display:column property=“email” />
      <display:column property=“status” />
      <display:column property=“date” decorator=“org.displaytag.sample.LongDateWrapper” />
      </display:table>
      org.displaytag.sample.LongDateWrapper要實現ColumnDecorator接口,它的方法:
      public final String decorate(Object columnValue)
      {
      Date date = (Date) columnValue;
      return this.dateFormat.format(date);
      }
    (10)創建動態鏈接
    有兩種方法創建動態連接:
      A、在display:column/里通過增加href、paramId、paramName、paramScope、paramProperty屬性
      href  基本的URL 地址
      paramId 加在URL 地址后的參數名稱
      paramName 數據bean的名稱,一般為null(即使用當前List里的對象)
      paramScope  數據bean的范圍,一般為null
      paramProperty  數據bean的屬性名稱,用來填充URL 地址后的參數值
      <display:table name=“sessionScope.details”>
       <display:column property=“id” title=“ID” href=“details.jsp” paramId=“id” />
      <display:column property=“email” href=“details.jsp” paramId=“action” paramName=“testparam” paramScope=“request” />
       <display:column property=“status” href=“details.jsp” paramId=“id” paramProperty=“id” />
      </display:table>
      這種方法簡便直接,但缺點是無法產生類似details.jsp?id=xx&action=xx的復合URL
      B、應用decorator 創建動態連接:
      <display:table name=“sessionScope.details” decorator=“org.displaytag.sample.Wrapper” >
       <display:column property=“link1” title=“ID” />
       <display:column property=“email” />
       <display:column property=“link2” title=“Actions” />
      </display:table>
  • org.displaytag.sample.Wrapper里的方法:
      public String getLink1()
      {
      ListObject lObject= (ListObject)getCurrentRowObject();
      int lIndex= getListIndex();
      return “<a href=“details.jsp?index=” + lIndex + “”>” + lObject.getId() + “”;
      }
      public String getLink2()
      {
      ListObject lObject= (ListObject)getCurrentRowObject();
      int lId= lObject.getId();
      return "<a href=“details.jsp?id=” + lId
      + “&action=view”>View | "
      + "<a href=“details.jsp?id=” + lId
      + “&action=edit”>Edit | "
      + “<a href=“details.jsp?id=” + lId
      + “&action=delete”>Delete”;
      }
    (11)column分組
    分組只是需要在column里增加group屬性:列中按組顯示
    <display:table name=“test” class=“simple”>
    <display:column property=“city” title=“CITY” group=“1”/>
    <display:column property=“project” title=“PROJECT” group=“2”/>
    <display:column property=“amount” title=“HOURS”/>
    <display:column property=“task” title=“TASK”/>
    </display:table>
    (12)統計
    可以對分組進行統計,也可以對所有行進行統計。 ??主要靠TableDecorator類finishRow()返回統計結果,放到頁面去顯示。
    (13)表格中嵌套表格
    <dispaly:column ><display:table 表格中的內容></display:table>?</display:column> ?
    4. displaytag的翻頁機制
    ?displaytag的翻頁機制?這可能是displaytag的局限性了,它的翻頁機制是這樣的: 如果一個list中有10000個bean,按照它的機制,如果是第一頁(每頁n條),它會把前n條數據取出來,然后再把剩余的10000-n條刪除,當你點擊頁面“2”的時候,它再從后臺繞一圈,把第二頁的數據,也就是把第n+1-2n條記錄取出來,把剩余的刪除。這樣,它實現了翻頁,又防止了內存占用過大。 但是,不管怎么說,它還是有一個取出所有條數的動作的,在極大數據量的情況下,有可能造成內存溢出。
    5. Displaytag屬性配置
    前面所說的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進行轉換。

  • 簡單使用
    首先我們定義一個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>
    7.displaytag的優缺點
    ?1,支持表格的嵌套.
    ?2,支持css這樣就能寫少量地代碼使得程序更簡潔.只好定義好一套css,就能全局范圍內使用了.
    ?3,另外還支持截斷長的字符串,這樣就不用在頁面使用自己的方法了.?
    ?4,能夠實現比較復雜的邏輯從而產生動態鏈接。這也勉強所以個好處吧。
    ?5,能輕松地使用struts的資源文件。使得它可以很好的國際化。
    ?6,能夠過濾空值。
    種功能設計得很體貼、很實用,效率也不錯。導出、分頁、排序都很方便,外
    觀設計也很便于修改。

  • 缺點:?
    ?1,分組就使用不了了,統計也無法使用了。只統計當前頁是沒有意義的。
    ?2,排序也變成當前頁排序了。沒多少意思。
    ?3,導出也變成當前頁導出了,沒多少意思了。

    總結

    以上是生活随笔為你收集整理的displaytag 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。