Callbacks被用于重新得到(retrieve)、過濾和排序行數據。eXtremeTable為每個callback提供了一個定制實現。
首先,載入所有的元數據,元數據為所有eXtremeTable標簽的所有屬性;接著在eXtremeTable的model中調用
execute方法。eXtremeTable使用execute方法決定如何通過調用每個callback的接口來重新得到、過濾和排序行數據。
這三個callback的接口是:RetrieveRowsCallback、FilterRowsCallback和SortRowsCallback。
callbacks為singleton并且不是線程安全的,因此不要定義任何類變量。
8.2. RetrieveRowsCallback
RetrieveRowsCallback的默認實現在servlet范圍內尋找具有名稱和TableTag
的items屬性設置相同的Beans集合。為了使用定制的callback,只要實現RetrieveRowsCallback接口,
然后使用retrieveRowsCallback屬性來指定實現類的全路徑:
<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;
}
只有一個方法需要實現,傳入TableModel并返回一個集合,集合為Beans或Maps集合。
通過得到TableModel,就擁有了TableTag的所有元數據并能訪問Context。能夠訪問Context非常重要,
這意味著你訪問web容器的任何東西。
FilterRowsCallback的默認實現得到Beans集合,通過實現jakarta Predicate接口進行過濾,
過濾值從eXtremeTable的filter輸入框中取得。為了使用定制的callback,只要實現FilterRowsCallback接口,
然后使用filterRowsCallback屬性來指定實現類的全路徑:
<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;
}
只有一個方法需要實現,傳入TableModel并返回一個集合。你只需像eXtremeTable對
每個callback的默認實現一樣來定制自己的callback。
SortRowsCallback的默認實現得到Beans集合,使用jakarta BeanComparator進行排序,
排序值當用戶點擊列頭時取得。為了使用定制的callback,只要實現SortRowsCallback接口,
然后使用sortRowsCallback屬性來指定實現類的全路徑:
<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;
}
只有一個方法需要實現,傳入TableModel并返回一個集合。你只需像eXtremeTable對
每個callback的默認實現一樣來定制自己的callback。