ExtremeTable使用指南:拦截器使用指南

1. 引言

拦截特性被用在运行时需要修改属性值的时候,它使得改变基于数据的eXtremeTable的行为成为可能。在阅读扩展标签属性时,你会发现它和扩展标签属性具有同样的概念和方法标识。 区分使用他们的首要准则是:如果需要向TLD里已经定义的并且能够在JSP中访问的标签添加新的属性时,应该使用扩展标签属性;如果仅仅是需要修改已经定义好的属性的值的时候,应该使用拦截器。

你可能需要了解更多的eXtremeTable如何运作的技术背景才能完全理解这种特性。 eXtremeTable首先做的就是遍历所有标签并创建对应的模型beans (pojos)。beans是具有和标签一样属性,但是使用真实类型来替换仅仅使用字符串类型的对象。beans是被模型使用并且是你需要使用拦截特性修改的对象。 所有的拦截器接口都定义了一个add方法, add方法被用来处理模型bean第一次创建时的属性。行和列的拦截器还有一个modify 方法。modify方法可以在当行和类进行处理是对属性值进行操作。

[ edit]

1.1. 拦截器列表

下面列出了具有拦截特性的标签和他们需要被实现的接口,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
[ edit]

1.2. 行拦截器示例

示范拦截特性的完美示例就是根据一定的标准来对行进行高亮显示,这也是我们将要完成的示例。它很短也很简单,不过它实现的概念同样适用于每一个拦截器接口。

我们需要做的第一件事就是实现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">

你可能感兴趣的:(bean,jsp)