說到
ExtremeTable(以下簡稱ET,呃,,,ET.....),可以說不知道的人甚少.不過估計用的也未必多罷了.今天,給大家介紹一個由ET的作者重新實現的一套關于Table的API.
JMesa.
我是一個偶然的機會知道Jmesa,我在做一個數據展現系統的時候想尋找ET的幫忙,但發現ET己不再更新,作者把精力轉移到了新的項目中,也就是這個
JMesa.這個項目的目的是為開發者提供更有效的表格展現的API,而不是簡單的TagLib.無論從靈活性,易擴展性,易用性,均比ET上了一個層
次.最近Release的版本里面,并不包括TagLib.而在下一個版本(2.1.0)將會加入TagLib,目前TagLib己經可用,在SVN里已
有.只是等待下一個版本的發布,其間會有一些更新,不過會兼容目前的TagLib的.
假如我從API開始介紹JMesa,恐怕并不是個好的辦法,像我以前的文章里面有介紹,結果反響不大.這次決定從TagLib入手,來給大家介紹一下Jmesa.
大家可以從附件里拿到一個Demo.注意Demo依賴JMesa以及其他Lib.在Lib文件夾下有詳細說明.
現在來看看JMesa的使用:
- <jm:table id="product" items="products" caption="product listing">
- <jm:column property="name" sortable="true" filterable="true"/>
- <jm:column property="price" />
- <jm:column property="createdTime" />
- <jm:column property="id" title="edit">
- <a href="viewProduct.action?id="<jm:property/>"><jm:property name="name"/></a>
- </jm:column>
- </jm:table>
估計比較容易看得懂的代碼吧.
Jmesa
的檢簽規范當中只有三個Tag:Table,Row,Column.而當前的TagLib實現中只實現了Table和Column兩個(Row是可選
的).另加一個Property的Tag.此階段,Property的Tag是很有用的,其起到的作用與Webwork的PropertyTag相差無
幾, 用來獲得對象的某個屬性.之所以使用Property
Tag是因為當前的TagLib有個限制就是暫時不支持如JSTL的${}這種寫法.將來會支持,屆時Property
Tag也會繼續獲得兼容.Jeff比較傾向于使用迭代的方式實現Tag,那樣可以支持${}這樣的寫法.不過作為TagLib的開始,問題不大.有時間再
重構一下TagLib,支持JSTL的寫法.
好了,來說一說這些Tag的使用方法:
Table:
Attribute |
Description |
id |
表格的ID(必須) |
items |
對象或者Map的集合 (必須) |
caption |
表格的標題
|
theme |
表格的主題,自定義樣式
|
exportTypes |
使用逗號分割導出的類型,目前支持導出類型有CSV,Excel
|
width |
表格寬度
|
style |
即表格的Style屬性
|
styleClass |
使用的Css的Class名字
|
border |
表格寬
|
cellpadding |
表格屬性
|
cellspacing |
表格屬性
|
實際上,真正Release的版本里面將會加上var以及Limit屬性.
var屬性值即在Column標簽里可以獲得的對象變量.
Limit屬性是保存在當前請求的Limit的對象名.
Row:
Attribute |
Description |
highlighter |
是否高亮顯示
|
onclick |
點擊事件
|
onmouseout |
鼠標移出事件
|
onmouseover |
鼠標移入事件
|
該Tag是可選的.實際上Jmesa提供了一系列默認的事件響應,有必要的情況下才使用.
Column:
Attribute |
Description |
property |
Java對象或Map的屬性名 |
title |
列的名稱
|
filterable |
是否可按過濾條件查找
|
sortable |
是否要排序
|
width |
列寬
|
style |
Style屬性
|
styleClass |
使用的Css的Class的名字
|
ColumnTag的使用方法有下面幾種:
- <jm:column property="name"/>
將僅僅輸出對象中Name屬性值.列名是Name
- <jm:column property="name" title="名字" sortable="true" filterable="false"/>
這樣可以得到自定義的列名,可以讓列可查找,可排序,當然你Server端需要相應提供排序及查找功能.不過就算你不提供,客戶端也會把當前結果排序和查找的.
- <jm:column property="id" title="edit">
- <a href="viewProduct.action?id="<jm:property/>"><jm:property name="name"/></a>
- </jm:column>
這里結合了PropertyTag.實現自定義列顯示.可以靈活定制自己的單元格.
在ColumnTag里面,使用PropertyTag的時候,可以指定Name屬性,如果不指定則使用當前Column的Property屬性值.
以后將支持:
- <jm:column property="id" title="edit">
- <a href="viewProduct.action?id=${id}">${name}</a>
- </jm:column>
這樣的寫法.當然會繼續兼容PropertyTag,盡管不是Tag規范里的東西.
相信經過上面的一番介紹,大家對Jmesa有一定的感性認識了吧.還沒有?下載Demo,扔進Tomcat 的App里跑一下就明白了.
有什么建議,請一定要告訴我 :).
附件在:http://www.javaeye.com/topics/download/4eaaa38d-e838-459d-aef2-3be6c4d043df