smartFilter默认是给data设置filter的,普通data直接设置filter是不起作用,因此需要自己给action传参拼接where条件
可以在smartFilter的onFilter事件中获取到搜索框中输入的值,然后传给action做过滤;具体实现如下:
1.在Model的构造函数中定一个变量用了存储smartFilter的onFilter事件中获取到搜索框中输入的值
var Model = function(){
this.callParent();
this.filterStr = "";
};
2.在smartFilter的onFilter事件中获取到搜索框中输入的值,并刷新数据
Model.prototype.data1CustomRefresh = function(event){
var data1 = this.comp("data1");//获取data
var grid1 = this.comp("grid1");//获取展现数据的grid组件
var param = new biz.Request.ActionParam();
param.setString("filterStr",this.filterStr);//把需要过滤的值赋值给action的参数,便于后端过滤
biz.Request.sendBizRequest({
"context" : this.getContext(),
"action" : "loadMainAction",
"parameters" : param,
"callback" : function(callbackData) {
callbackData.ignoreError = false;
if (callbackData.state) {
data1.loadData(callbackData.response, false);//把返回的数据给data
grid1.refresh();//刺激grid显示数据
}
}
});
};
4.action对应的java代码的实现,需要注意action中需要定义一个String类型的参数,此案例为filterStr
public static Table loadMain(Integer limit,Integer offset,String filterStr) {
//设置where条件
String whereStr = "where 1=1";
//如果filterStr参数的值不为空拼接where条件
if(!filterStr.isEmpty()){
whereStr += "and zsj.fName like concat('%','"+filterStr+"','%')";
}
String ksql = "select zsj,zsj.fName,zsj.fCode from AP_ZHJ zsj "+whereStr;
Table table = KSQL.select(ksql, null, "/appdemo/test/data", null);
// 设置主键
table.getProperties().put(Table.PROP_NAME_ROWID, "zsj");
return table;
}

评一波