Interceptor Tutorial
拦截器的学习例子
拦截器的特征就是被用来在运行时改变属性值的. 这使得能够改变eXtremeTable的行为, eXtremeTable是基于数据的. 如果你读过关于如何来扩展tag的属性, 那它是相同的概念和方法实现. 一般来说, 当你需要为tag增加属性的时候, 你应该使用扩展的tag属性, tag是被定义在TLD, 在JSP中可用. 当你仅仅需要去修改属性的时候, 可以使用拦截器, 这些属性都已经被定义好了.
Interceptor Chart
拦截器图表
下面罗列的tags, 包含了一个拦截器属性, 然后接口需要被实现. 列Bean显示被model所创建的bean.
Tag | Interface | Bean |
TableTag | org.extremecomponents.table.interceptor.TableInterceptor | org.extremecomponents.table.bean.Table |
RowTag | org.extremecomponents.table.interceptor.RowInterceptor | org.extremecomponents.table.bean.Row |
ColumnTag | org.extremecomponents.table.interceptor.ColumnInterceptor | org.extremecomponents.table.bean.Column |
ExportTag | org.extremecomponents.table.interceptor.ExportInterceptor | org.extremecomponents.table.bean.Export |
Row Interceptor Example
行拦截器例子
一个完美的例子用来模拟拦截器的特征, 基于某一个标准将会使得一行高亮, 我们将会学习这个例子. 这个是比较简短的. 在这个例子中所被用到的概念也适用于其他每一个拦截器接口.
首先一件事我们需要做的就是实现RowInterceptor接口. 你将会注意到在这个接口中有两个方法. 他们是
addRowAttributes()
和
modifyRowAttributes(). addRowAttributes是在Rown bean被创建的时候被调用的. 在table当前页载入数据的时候,
modifyRowAttributes会被调用的.
public class MarkerInterceptor implements RowInterceptor {
public void addRowAttributes(TableModel tableModel, Row row) {
}
public void modifyRowAttributes(TableModel model, Row row) {
President president = (President) model.getCurrentRowBean();
String career = president.getCareer();
if (StringUtils.contains(career, "Soldier")) {
row.setStyle("background-color:#fdffc0;");
} else {
row.setStyle("");
}
}
}
在配置文件中, 你需要去为row拦截器声明一个别名.
row.interceptor.marker=org.extremesite.interceptor.MarkerInterceptor
这个RowTag将会使用拦截器属性来调用MarkerInteceptor.
<ec:row interceptor="marker">
如果想让配置说明书和RowTag的语法可以使用生效, 那么可以参考配置文件说明书 (Preferences tutorial).