Extjs + java + ibatis 具有搜索功能的分页组件

Extjs提供的store虽然具有过滤功能,但是不具备分页进行搜索的功能。


这里提供一个 具有能够分页的搜索方案。


1. js文件中:

a. 在grid 的 constructor 中:

this.store.load({params:{pageStyle:'paging',start:this.nRecordStart,limit:this.nShowRecords,goodTypeNum:'',batchNum:'',orderState:''}});
b. 在搜索按钮的事件处理函数中:

	/**处理搜索按钮的点击事件
	 * @author William
	 * */
	,onSearchClick:function(){
		
		//获取搜索面板中的搜索条件值
		var batchNum	 = this.find('name','SearchFieldset_batchNum')[0].getValue();
		var goodTypeNum = this.find('name','SearchFieldset_goodTypeNum')[0].getValue();
		var orderState  = this.find('name','SearchFieldset_orderState')[0].getValue();
		
		 // 这里很关键,如果不加,翻页后搜索条件就变没了,这里的意思是每次数据载入前先把搜索表单值加上去,这样就做到了翻页保留搜索条件了  
        this.store.on('beforeload',function(){       
            Ext.apply(       
            this.baseParams,       
            {       
                batchNum: batchNum  
                ,goodTypeNum:goodTypeNum
                ,orderState:orderState
            });       
        }); 
                            
		// 根据搜索条件重新加载数据
		this.store.load({params:{pageStyle:'paging',start:this.nRecordStart,limit:this.nShowRecords, batchNum:batchNum, goodTypeNum:goodTypeNum, orderState:orderState }});
		
	}


2. Action中:

	public String sAllOrdersInfo() throws SQLException{

    	System.out.println(" OrderAction_sAllOrdersInfo executes !");
    	String json = "";
    	int end = start + limit;
    	List<OrderAllInfo> listOrders = new ArrayList<OrderAllInfo>();
    	List<OrderAllInfo> listOrdersSends = new ArrayList<OrderAllInfo>();
    	// 获取前端传入的搜索字段
    	String goodTypeNum	= super.getRequest().getParameter("goodIdNum"); // 货号
    	String batchNum		= super.getRequest().getParameter("batchNum"); // 批号
    	String orderState		= super.getRequest().getParameter("orderState"); // 生产单状态
    	 
    	 // 调整输入的字段
    	 if( null != orderState ){
    		 if( orderState.equals("所有")){
    			 orderState = "";
    		 }
    	 }
    	 
    	// 执行查询
    	try {
    		listOrders = orderService.sAllOrdersInfo( goodTypeNum, batchNum, orderState );
		} catch (SQLException e) {
			e.printStackTrace();
		}
    	// 数据调整
		
		//如果采用的是分页模式
		if( pageStyle.equals("paging") ){
			end = start+limit;
			int length = listOrders.size();
	    	if(end > length){
	    		end = length;
	    	} 
	    	
	    	listOrdersSends = listOrders.subList(start, end);
	    	super.setContentType(super.JSON);
	    	json = "{count:" + listOrders.size() + ",items:" + super.getJSONArrayString(listOrdersSends) + "}"; // 将数据全部发到前端
		}
		// 如果采用的不是分页模式
		else{
	    	super.setContentType(super.JSON);
	       json = "{count:" + listOrders.size() + ",items:" + super.getJSONArrayString(listOrders) + "}"; // 将数据全部发到前端
		}
    	super.outPrint(json);
    	
    	return "json";
	}


3. xml中:

条件是:

WHERE ( g.good_type_num LIKE  '%$goodTypeNum$%' ) AND ( o.batch_num LIKE  '%$batchNum$%' ) AND ( o.order_state LIKE  '%$orderState$%' ) 


注:

以上条件为:只要某字段中出现了相应条件对应的字符或者数字即可。 而如果字段中可能出现 2, 12 , 这种情况怎么办呢?


解决方案:

action中:

String sCity = "";
		if( 20 == city ){
			sCity = "%%";
		}else{
			sCity = city + "";
		}
		
		// 构建参数map
		HashMap map = new HashMap<String, Object>();
		map.put("city", sCity);
		map.put("name", name);


XML中:

WHERE eb.enterprise_name LIKE '%$name$%' AND eb.enterprise_city LIKE '$city$'



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值