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,在此不再多说,详细说明可见官方资料。