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$'



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章