幸せのちから

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

          定制FilterRowsCallback

          定制FilterRowsCallback


          1. 引言

          FilterRowsCallback被用來(lái)過(guò)濾傳給eXtremeTable的Beans的Collection。 FilterRowsCallback的默認(rèn)實(shí)現(xiàn)是得到Beans或Maps的Collection,然后通過(guò)實(shí)現(xiàn)jakarta Predicate接口來(lái)進(jìn)行過(guò)濾。當(dāng)然,如果你需要進(jìn)行一些定制你可以插接自己的實(shí)現(xiàn)。

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

          本示例示范了如何調(diào)整代碼為過(guò)濾器提供一個(gè)精確的比較功能。當(dāng)前的實(shí)現(xiàn)是通過(guò)使用StringUtils.contains()方法進(jìn)行模糊比較。 本示例將使用StringUtils.equals()方法。你可以按照你的需要來(lái)調(diào)整代碼進(jìn)行更多定制。

          1.1. 定制FilterRowsCallback示例

          首先你需要做的是創(chuàng)建一個(gè)實(shí)現(xiàn)Predicate接口的定制類。Predicate要求我們實(shí)現(xiàn)evaluate()方法來(lái)判斷是否包含 當(dāng)前bean。因?yàn)槟銉H僅調(diào)整現(xiàn)在已有的功能,首先得到filterPredicate的源代碼(在發(fā)行包的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;
          }

          ...

          }
          }

          然后我們需要實(shí)現(xiàn)和Predicate共同作用的FilterRowsCallback接口。再一次從發(fā)行包的callback包下拷貝ProcessRowsCallback源代碼到你的工程里。 請(qǐng)參照我們創(chuàng)建的定制的ExactMatchFilterPredicate 類來(lái)確認(rèn)僅僅實(shí)現(xiàn)了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;
          }

          ...

          }
          }

          為了使用這個(gè)FilterRowsCallback你應(yīng)該在Preferences中聲明一個(gè)別名。當(dāng)然,你可以省略這步而在JSP中提供這個(gè)FilterRowsCallback實(shí)現(xiàn)類的全路徑,但是使用Preferences更簡(jiǎn)潔。

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

          在TableTag通過(guò)設(shè)置filterRowsCallback屬性來(lái)使用ExactMatchFilterRows。

          <ec:table filterRowsCallback="exactMatch"/>

          如果不清楚Preferences和ColumnTag定義語(yǔ)法請(qǐng)參考Preferences指南。

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

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

          導(dǎo)航

          隨筆分類(125)

          文章分類(5)

          日本語(yǔ)

          搜索

          積分與排名

          最新隨筆

          最新評(píng)論

          主站蜘蛛池模板: 贵定县| 大渡口区| 湘乡市| 皮山县| 秦皇岛市| 沧源| 彰化县| 宿迁市| 林芝县| 定远县| 石泉县| 扎赉特旗| 桐柏县| 阳江市| 天峨县| 威信县| 武山县| 个旧市| 衡阳市| 盱眙县| 广宗县| 砚山县| 唐河县| 清水河县| 黔南| 定安县| 杭锦旗| 文昌市| 鞍山市| 中方县| 西吉县| 长岛县| 东丽区| 台安县| 延川县| 富裕县| 常熟市| 遂川县| 田林县| 桂林市| 眉山市|