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