拦截特性被用在运行时需要修改属性值的时候,它使得改变基于数据的eXtremeTable的行为成为可能。在阅读扩展标签属性时,你会发现它和扩展标签属性具有同样的概念和方法标识。 区分使用他们的首要准则是:如果需要向TLD里已经定义的并且能够在JSP中访问的标签添加新的属性时,应该使用扩展标签属性;如果仅仅是需要修改已经定义好的属性的值的时候,应该使用拦截器。
你可能需要了解更多的eXtremeTable如何运作的技术背景才能完全理解这种特性。 eXtremeTable首先做的就是遍历所有标签并创建对应的模型beans (pojos)。beans是具有和标签一样属性,但是使用真实类型来替换仅仅使用字符串类型的对象。beans是被模型使用并且是你需要使用拦截特性修改的对象。 所有的拦截器接口都定义了一个add方法, add方法被用来处理模型bean第一次创建时的属性。行和列的拦截器还有一个modify 方法。modify方法可以在当行和类进行处理是对属性值进行操作。
下面列出了具有拦截特性的标签和他们需要被实现的接口,Bean栏显示了被模型创建的Bean。
标签 接口 Bean TableTag org.extremecomponents.table.intercept.InterceptTable org.extremecomponents.table.bean.Table RowTag org.extremecomponents.table.intercept.InterceptRow org.extremecomponents.table.bean.Row ColumnTag org.extremecomponents.table.intercept.InterceptColumn org.extremecomponents.table.bean.Column ExportTag org.extremecomponents.table.intercept.InterceptExport org.extremecomponents.table.bean.Export
示范拦截特性的完美示例就是根据一定的标准来对行进行高亮显示,这也是我们将要完成的示例。它很短也很简单,不过它实现的概念同样适用于每一个拦截器接口。
我们需要做的第一件事就是实现InterceptRow接口。你会注意到这个接口有两个方法:addRowAttributes() 和modifyRowAttributes()。addRowAttributes方法在行bean创建的时候被调用, modifyRowAttributes方法在表处理当前页面行的时候被调用。
public class MarkerIntercept implements InterceptRow { 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(""); } } }
在Preferences里你应该定义这个行拦截器的别名。
row.intercept.marker=org.extremesite.intercept.MarkerIntercept
这样就可以在行标签中使用拦截器MarkerIntercept了。
<ec:row intercept="marker">