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; }
评一波