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.smartFilter1Filter = function(event) {
		this.filterStr = event.source.searchText.get();//获取搜索框中输入的值并赋值给变量this.filterStr
		var data = event.source.getFilterData();//获取要过滤数据的data
		data.refreshData();//调用data的刷新
	};

smartFilter的定义如下:
smartFilter
3.在data的onCustomRefresh事件中调用action加载数据

	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;

	}