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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

displaytag 使用

發布時間:2023/12/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 displaytag 使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先,墨守成規地把這幾天的學習內容羅列一下。

然后,根據displaytag具有的缺陷以及解決辦法提出自己的無限失望。

好,開始列了,

displaytag 學習筆記總結(1)

6,列表的子集
<display:table name="mylist" offset="m" length="n"/>
offset 為第一個數據在mylist中的序號。
length 為顯示的記錄條數。

7,自動設置鏈接
能夠把此列的內容作為鏈接,連接的url和內容一致。
當然必須格式有效的url,否則寫了也沒有連接。


自認為這個功能一般。
因為連接的內容和顯示的內容通常不一樣。

當然可以在<display:column href="">在這里給某列指定所有的鏈接為同一個連接。
或者<display:column ><a href="">sdfs</a></display:column >兩者效果是一樣的。

!!!那么,如果連接的url不是列內容,而且每行的鏈接都不相同,這個時候怎么辦?
就好像廣告列表有商戶名稱,商戶名稱是一個連接,連接到商戶的具體信息頁面。
連接的url肯定不同。如何處理?

現在還不知道,接著往下看。

8,使用裝飾類來轉換數據。


<display:table name="test" decorator="org.displaytag.sample.Wrapper" >
用來轉換數據內容的。一般用來格式化信息。
此類必繼承TableDecorator。
順便介紹一個格式化時間的包 org.apache.commons.lang.time.FastDateFormat;
格式化金錢的包 java.text.DecimalFormat;

思路就是覆蓋List中具體類型的getXXX方法。
this.getCurrentRowObject() 得到當前行的數據。
this.getListIndex() 得到當前行的序號。
之后就轉化為List中存放的具體類型,之后得到某列的數據。
返回格式化后的數據。

!!!!另外我看到,裝飾類增加了一些getXXX方法,這些方法并沒有在ListObject中定義。
還不知道這樣做有什么好處?

<display:column property="date" decorator="org.displaytag.sample.LongDateWrapper" />
這樣僅僅對一列數據進行格式化,需要繼承ColumnDecorator
需要實現:String decorate(Object columnValue)方法。此方法同樣接受一個Object參數,
此參數就是對象的某個具體屬性值,直接轉化為對應類型,然后格式化,返回String。


9,建立動態鏈接。
兩種方式可以建立動態鏈接。
第一種方式直接在頁面上使用
<display:column href="baseurl" paramId="paramid" />
http://baseurl/paramid=columnvalue
<display:column href="baseurl" paramId="paramid" paramName=“name” paramScope="scope"/>
http://baseurl/paramid=scope范圍內的名字為name的值
<display:column href="baseurl" paramId="paramid" paramProperty=“propertyname”/>
http://baseurl/paramid=名字為propertyname的屬性值

這種方式處理簡單的鏈接十分有效,但是鏈接參數值如果通過查詢數據庫等比較復雜的方式得到的話,這種方式
就不適應了。這時候就必須使用第二種方法。

第二種方法,在裝飾類中獲得連接。
裝飾類多定義一些getXXX方法,那么頁面上就可以使用<display:column propety="XXX" ..>來使用裝飾類de
getXXX方法。好,這樣一來,在裝飾類的getXXX方法里,得到此行對象,這樣對象的各個屬性就都能得到,
之后去查數據庫也好,去完成負責的判斷邏輯也好,都很容易實現,別忘了,然后拼裝起來,并寫成一個
<a href="....">這樣的字符串返回。
好,頁面直接一句話就可得到此拼裝的《a》了。<display:column propety="XXX" ..>

第二種方法比較好些,因為可以顯得更靈活。想怎么寫就怎么寫。第一種方法就是簡單地實現。

10,翻頁。
1,怎么得到每行的序號?
<display:table id="xxx" ...>
使用<%=pageContext.getAttribute("xxx_rowNum")%>肯定好用。
但是<c:out value="${row_rowNum}"/>這種方式就不好用。也不知道差哪了。

翻頁很簡單。就是在<display:table pagesize="m">這樣來指定每頁的數量就可以了。
自動出現換頁的索引,上下頁等等東西。
實在是方便。但是問題就是一次傳下來很多東西,性能不好。等一會看看如何改良。


11,自動設置排序
<display:table name="sessionScope.stest" defaultsort="1" defaultorder="descending">
<display:column property="id" title="ID" sortable="true" headerClass="sortable" />
可以設定默認時按照哪列排序,是升序還是降序。本例設置第一列默認時降序。
每列都得對象都必須實現了Comparable接口才能被設置成sortable="true".
如果沒有實現Comparable,那么必須寫一個裝飾類。
另外需要注意,
他只對當前頁面進行排序。而不是全部。在翻頁時特別需要注意。
要想實現全部的排序,那么必須重新寫Action往網頁傳新的List了。

12,如何分組
按照某列進行分組顯示。
這個功能真不錯。
<display:column property="city" title="CITY" group="1"/>
<display:column property="project" title="PROJECT" group="2"/>
這樣不僅僅結果可以分組,而且還可以省略掉重復的數據,例如city列,project列都有
A ,B ,A,B 兩行那么第二行這兩列就不顯示了。

同樣只能對當前頁進行分組。

注意:第一列一定要1,第二列一定是2,否則出NUllPoint 錯誤。

13,統計
好東西啊。可以對分組進行統計,也可以對所有行進行統計。
主要靠TableDecorator類finishRow()返回統計結果,放到頁面去顯示。

TableDecorator類方法getDecoratedObject()得到整個結果集。一般把它轉化成List,因為大多數情況下結果
是存放在List中的。
public final String finishRow() {}當一行結束時執行此方法。所以用它來判斷是否需要計算城市統計,
抑或是全部統計。
相當于事件處理。返回的字符串也將在頁面上顯示。本例返回了<tr><td>...</td><tr>這樣的三份。
這樣就在表中嵌套進了三行。用來顯示統計是足夠了。


14,導出數據
很簡單。talbe里設置export=“true”就行了。配置文件也要設置好export.xml = true , 這樣才能導出xml。
類推pdf、excel、html、csv。
每個列能配置是否在某種格式中顯示,語法<display:column media="csv excel" 。。
不配置就在所有格式中都顯示。

另外需要注意:
被包含的文件不能使用這個功能,非要使用,就的用過濾器。以后再深研究吧。

15,配置DisplayTag.
在應用的classpath路徑上拷貝一個TableTag.properties,并命名為displaytag.properties.
這樣就默認取displaytag.properties里的配置了。想漢化,很簡單。就需要把displaytag_zh.properties放到
classpath路徑下就可以了。

標題像漢化:因為默認是jstl的資源文件使用方式。所以得先學習jstl的
我知道了jstl.fmt如何使用資源文件。好了,jstl 首先必須用fmt:bunlle指定一個資源文件,然后才能
在他的body部分使用此資源文件,頗麻煩。

而displaytag呢? 沒有這么麻煩,如果與struts搭配使用,適用struts的資源文件當然最合理了。
你必須在displaytag.properties里定義好一個
參數,#locale.provider=org.displaytag.localization.I18nJstlAdapter
locale.provider=org.displaytag.localization.I18nStrutsAdapter
就這么簡單,就能夠使用struts配置文件了。我今天竟然看了一下午。哎,苦于沒有好點的資料啊。

問題是:如果不合struts搭配使用。如果僅僅在jstl環境下,displaytag又該如何使用jstl的資源文件呢?
你必須象在jstl環境里一樣使用<fmt:bundl>指定好資源文件,之后把displaytag標簽放到他的body
后,就可以使用jstl的資源文件了!!!!(幸虧我首先看了jstl使用資源文件的方法)


16,一個頁面兩個以上的表格.
很簡單,只需要每個表格配置不同的id.

17,表格里面還有表格.
很簡單.只要在外層表的
<dispaly:column>
( 在這加<display:table ...>。。。
</display:table>即可)
</display:column>



18,表頭表尾
很簡單:<dispaly:caption><display:footer>想<display:column>一樣使用就行了.
主要注意一下: <display:footer>內容必須是<tr>.....</tr>

19,表格里的值截斷,與顯示空白.
<display:column property="nullValue" nulls="false"/>
<display:column property="longDescription" maxLength="10" style="whitespace: nowrap;"/>
簡單得很.

ok,差不多到了關鍵的時候了。!!!!!

=============================================
關鍵:
20,如何分頁.

因為displaytag的分頁機制需要一次把所有紀錄都傳到里面.所以對紀錄很多的項目并不合適.如果還非得用
displaytag那只好放棄他的一些功能了.比較理智的方法是僅僅讓displaytag獲得一頁的list.這樣就不用displaytag
的分頁index,而使用自己的,或者寫customertag,或者使用jsppager tag.

有很多人質疑這種方法,因為這使得displaytag的光芒至少減少了一半以上,因為他的很多功能因此而無法使用,
例如排序功能,可以針對所有list進行全局排序,如果每次只傳給一頁的數據,全局排序就和當頁排序沒有區別了.
displaytag的全局排序功能宣布廢掉了.

<display:table name="mylist" offset="m" length="n"/>這樣的功能基本上也沒有什么用處。


那么還使用它干什么呢? displaytag即使廢掉了一些武功仍然有它的優點.例如
1,支持表格的嵌套.
2,支持css這樣就能寫少量地代碼使得程序更簡潔.只好定義好一套css,就能全局范圍內使用了.
3,另外還支持截斷長的字符串,這樣就不用在頁面使用自己的方法了.
4,能夠實現比較復雜的邏輯從而產生動態鏈接。這也勉強所以個好處吧。
5,能輕松地使用struts的資源文件。使得它可以很好的國際化。
6,能夠過濾空值。


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

唉,總體來說,displaytag真正一用,就像掉光了羽毛的孔雀,華麗的東西丟失殆盡,可惜我用了一個星期的時間,
絕對時間也有16個小時來研究它。


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/srx/archive/2005/12/19/556289.aspx

總結

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

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