幸せのちから

          平凡的世界
          看似平常實崎嶇
          成如容易卻艱辛

          定制FilterRowsCallback

          定制FilterRowsCallback


          1. 引言

          FilterRowsCallback被用來過濾傳給eXtremeTable的Beans的Collection。 FilterRowsCallback的默認實現是得到Beans或Maps的Collection,然后通過實現jakarta Predicate接口來進行過濾。當然,如果你需要進行一些定制你可以插接自己的實現。

          首先聲明,本示例代碼包含一些從原包中剪切、粘貼的代碼(雖然不是很多)。在 最初的最終發行包之后,值過濾得到進一步改善使得更具復用性并更容易實現,可能和定制cell代碼行數相同。 當然,我被要求并非常樂意示范如何在當前代碼基礎上實現定制過濾。這有非常清晰的hooks實現,并且很容易實現。

          本示例示范了如何調整代碼為過濾器提供一個精確的比較功能。當前的實現是通過使用StringUtils.contains()方法進行模糊比較。 本示例將使用StringUtils.equals()方法。你可以按照你的需要來調整代碼進行更多定制。

          1.1. 定制FilterRowsCallback示例

          首先你需要做的是創建一個實現Predicate接口的定制類。Predicate要求我們實現evaluate()方法來判斷是否包含 當前bean。因為你僅僅調整現在已有的功能,首先得到filterPredicate的源代碼(在發行包的callback包下), 拷貝到你的工程里。然后向下面展示的一樣將 StringUtils.contains()方法修改為StringUtils.equals()方法:

          public final class ExactMatchFilterPredicate implements Predicate {
          private boolean isSearchMatch(String value, String search) {

          ...

          else if (StringUtils.equals(value, search)) {
          return true;
          }

          ...

          }
          }

          然后我們需要實現和Predicate共同作用的FilterRowsCallback接口。再一次從發行包的callback包下拷貝ProcessRowsCallback源代碼到你的工程里。 請參照我們創建的定制的ExactMatchFilterPredicate 類來確認僅僅實現了FilterRowsCallback和修改Predicate。

          public class ExactMatchFilterRows implements FilterRowsCallback {
          public Collection filterRows(TableModel model, Collection rows) throws Exception {

          ...

          if (filtered) {
          Collection collection = new ArrayList();
          Predicate filterPredicate = new ExactMatchFilterPredicate(model);
          CollectionUtils.select(rows, filterPredicate, collection);

          return collection;
          }

          ...

          }
          }

          為了使用這個FilterRowsCallback你應該在Preferences中聲明一個別名。當然,你可以省略這步而在JSP中提供這個FilterRowsCallback實現類的全路徑,但是使用Preferences更簡潔。

          table.filterRowsCallback.exactMatch=org.extremesite.callback.ExactMatchFilterRows

          在TableTag通過設置filterRowsCallback屬性來使用ExactMatchFilterRows。

          <ec:table filterRowsCallback="exactMatch"/>

          如果不清楚Preferences和ColumnTag定義語法請參考Preferences指南。

          posted on 2006-02-24 10:29 Lucky 閱讀(570) 評論(0)  編輯  收藏 所屬分類: extremeComponents

          <2006年2月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627281234
          567891011

          導航

          隨筆分類(125)

          文章分類(5)

          日本語

          搜索

          積分與排名

          最新隨筆

          最新評論

          主站蜘蛛池模板: 澄江县| 淮滨县| 喀什市| 贡嘎县| 阆中市| 疏勒县| 顺昌县| 汝阳县| 宜章县| 大余县| 泗阳县| 宝山区| 庐江县| 长阳| 弥勒县| 兰考县| 巴彦淖尔市| 靖安县| 包头市| 罗甸县| 沽源县| 蒙自县| 历史| 凤山县| 锡林浩特市| 奉节县| 临洮县| 高清| 遂川县| 湘阴县| 大方县| 富源县| 武山县| 四平市| 辽中县| 新巴尔虎左旗| 石狮市| 桦南县| 长宁区| 阿勒泰市| 米泉市|