jmesa之FilterMatcher

Jmesa本来已经讲得差不多了,但是还有一些细节可能需要完善一下,下面讲讲FilterMatcher,
FilterMatcher主要针对的是条件过滤,这里要解决的问题主要有两个,一是条件查询的时候需要下拉菜单,二是解决一些格式匹配问题,如不区分大小写,日期格式等。

下拉菜单问题解决起来很简单,首先实现一个包含下拉菜单的类:

public class NameDroplistFilterEditor extends DroplistFilterEditor {
   @Override
   protected List<Option> getOptions()  {
      List<Option> options = new ArrayList<Option>();
      options.add(new Option("fans","fans"));
      options.add(new Option("fansof", "fansof"));
      return options;
   }
}


然后把它赋给tableFacade:

........
HtmlColumn name = row.getColumn("name");
name.setTitle("名字");
name.getFilterRenderer().setFilterEditor(new NameDroplistFilterEditor ());
.........


最后在JSP的标签中引入:

.........
<jmesa:htmlColumn property="name" filterEditor="com.util.NameDroplistFilterEditor " />
........


这样,在名字的条件查询栏中,就会有相应的下拉菜单了。

第二个问题的解决可能会麻烦一点,它主要提供的是过滤的一种策略,解决的方式有两种,一种是直接在JAVA代码中使用实现了FilterMatcher的类,或者在JSP的标签中使用实现了FilterMatcherMap的类。
默认的过滤是区分大小写的,如果不要区分大小写,可以这样:

public class CaseFilterMatcher implements FilterMatcher {
   public boolean evaluate(Object itemValue, String filterValue) {

      String item = StringUtils.lowerCase(String.valueOf(itemValue));
      String filter = StringUtils.lowerCase(String.valueOf(filterValue));

      if (item.contains(filter) {
            return true;
      }

      return false;
   }
}


然后将它赋给TableFacade:

......
//注意位置
tableFacade.addFilterMatcher(new MatcherKey(String.class, "name"),new CaseFilterMatcher());
...


这样就可以了,如果要使用标签的方式,就需要实现FilterMatcherMap,在此不再多说,详细说明可见官方资料。

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