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。