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