Callbacks被用于重新得到(retrieve)、過濾和排序行數(shù)據(jù)。eXtremeTable為每個(gè)callback提供了一個(gè)定制實(shí)現(xiàn)。
首先,載入所有的元數(shù)據(jù),元數(shù)據(jù)為所有eXtremeTable標(biāo)簽的所有屬性;接著在eXtremeTable的model中調(diào)用
execute方法。eXtremeTable使用execute方法決定如何通過調(diào)用每個(gè)callback的接口來重新得到、過濾和排序行數(shù)據(jù)。
這三個(gè)callback的接口是:RetrieveRowsCallback、FilterRowsCallback和SortRowsCallback。
callbacks為singleton并且不是線程安全的,因此不要定義任何類變量。
8.2. RetrieveRowsCallback
RetrieveRowsCallback的默認(rèn)實(shí)現(xiàn)在servlet范圍內(nèi)尋找具有名稱和TableTag
的items屬性設(shè)置相同的Beans集合。為了使用定制的callback,只要實(shí)現(xiàn)RetrieveRowsCallback接口,
然后使用retrieveRowsCallback屬性來指定實(shí)現(xiàn)類的全路徑:
<ec:table
var="pres"
action="${pageContext.request.contextPath}/presidents.run"
retrieveRowsCallback="com.mycompany.callback.MyCustomCallback"
/>
RetrieveRowsCallback接口如下所示:
public interface RetrieveRowsCallback {
public Collection retrieveRows(TableModel model) throws Exception;
}
只有一個(gè)方法需要實(shí)現(xiàn),傳入TableModel并返回一個(gè)集合,集合為Beans或Maps集合。
通過得到TableModel,就擁有了TableTag的所有元數(shù)據(jù)并能訪問Context。能夠訪問Context非常重要,
這意味著你訪問web容器的任何東西。
FilterRowsCallback的默認(rèn)實(shí)現(xiàn)得到Beans集合,通過實(shí)現(xiàn)jakarta Predicate接口進(jìn)行過濾,
過濾值從eXtremeTable的filter輸入框中取得。為了使用定制的callback,只要實(shí)現(xiàn)FilterRowsCallback接口,
然后使用filterRowsCallback屬性來指定實(shí)現(xiàn)類的全路徑:
<ec:table
var="pres"
action="${pageContext.request.contextPath}/presidents.run"
filterRowsCallback="com.mycompany.callback.MyCustomCallback"
/>
FilterRowsCallback接口如下所示:
public interface FilterRowsCallback {
public Collection filterRows(TableModel model, Collection rows) throws Exception;
}
只有一個(gè)方法需要實(shí)現(xiàn),傳入TableModel并返回一個(gè)集合。你只需像eXtremeTable對(duì)
每個(gè)callback的默認(rèn)實(shí)現(xiàn)一樣來定制自己的callback。
SortRowsCallback的默認(rèn)實(shí)現(xiàn)得到Beans集合,使用jakarta BeanComparator進(jìn)行排序,
排序值當(dāng)用戶點(diǎn)擊列頭時(shí)取得。為了使用定制的callback,只要實(shí)現(xiàn)SortRowsCallback接口,
然后使用sortRowsCallback屬性來指定實(shí)現(xiàn)類的全路徑:
<ec:table
var="pres"
action="${pageContext.request.contextPath}/presidents.run"
sortRowsCallback="com.mycompany.callback.MyCustomCallback"
/>
SortRowsCallback接口如下所示:
public interface SortRowsCallback {
public Collection sortRows(TableModel model, Collection rows) throws Exception;
}
只有一個(gè)方法需要實(shí)現(xiàn),傳入TableModel并返回一個(gè)集合。你只需像eXtremeTable對(duì)
每個(gè)callback的默認(rèn)實(shí)現(xiàn)一樣來定制自己的callback。