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