開發指南專題七 JEECG微雲快速開發平臺查詢HQL過濾器
dategrid中的查詢過濾器預設是單條件查詢,即在設定多個dgCol的query=”true”之後,查詢條件中同時只能有一個條件被使用,生成的頁面效果如圖53所示。
當然,可以通過dategrid和dgCol的引數設定來達到更高階的查詢過濾功能,如組合查詢條件和值範圍查詢。1.3.1. 組合條件查詢
設定<t:dategrid>標籤的queryMode=”group”(該引數值預設為”single”,即單條件查詢),在頁面生成時,會生成一個組合查詢條件輸入面板。生成的頁面效果如圖54所示。
1.3.2. 欄位範圍查詢
設定<t:dgCol>標籤的queryMode=”group”,在頁面生成時,會生成一個範圍輸入框。生成的頁面效果如圖54所示。
圖55欄位範圍查詢效果
欄位範圍查詢會為該欄位生成兩個輸入框,name分別為“欄位名_begin”和“欄位名_end”,具體的查詢功能需要在後臺接收這兩個輸入框的內容,並把查詢條件加入到HQL中。示例如下:
@RequestMapping(params = "datagrid") public void datagrid(JeecgDemo jeecgDemo,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) { CriteriaQuery cq = new CriteriaQuery(JeecgDemo.class, dataGrid); //查詢條件組裝器 org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, jeecgDemo); String ctBegin = request.getParameter("createTime_begin"); String ctEnd = request.getParameter("createTime_end"); if(ctBegin!=null && ctEnd!=null){ try { cq.ge("createTime", new SimpleDateFormat("yyyy-MM-dd").parse(ctBegin)); cq.le("createTime", new SimpleDateFormat("yyyy-MM-dd").parse(ctEnd)); } catch (ParseException e) { e.printStackTrace(); } cq.add(); } this.jeecgDemoService.getDataGridReturn(cq, true); TagUtil.datagrid(response, dataGrid); } |
在控制器中用request接收傳遞到後臺的查詢條件,或者直接在方法引數列表裡填上,springmvc會幫我們獲得。
然後將得到的範圍查詢條件新增到CriteriaQuery物件中,最後呼叫CriteriaQuery的add()方法載入生成hql。
至此,範圍查詢就完成了。
1.3.3. 查詢欄位新增日期控制元件
例如,要給建立日期的範圍查詢條件框新增日期控制元件,首先為建立日期新增範圍查詢:
<t:dgCol title="建立日期" field="createTime" formatter="yyyy-MM-dd hh:mm:ss" query="true" queryMode="group"></t:dgCol> |
用jquery為生成的createTime_start和createTime_end兩個輸入框新增日期控制元件。
$(document).ready(function(){ $("input[name='createTime_begin']").attr("class","easyui-datebox"); $("input[name='createTime_end']").attr("class","easyui-datebox"); ); |
最終的效果如圖56所示。
1.3.4. 日期欄位的資料格式化
在dategrid中,對於日期欄位,可以通過設定<d:dgCol>的formatter屬性配置格式化方式,實現對日期資料的格式化,如:
<t:dgCol title="建立日期" field="createTime" formatter="yyyy-MM-dd hh:mm:ss" query="true" queryMode="group"></t:dgCol> |
對於日期的格式化方式,可以參考JDK參考手冊中SimpleDateFormat中對於日期和時間模式的說明,如圖57所示。
1.3.5. 資料列表合計功能
進行資料的列表展示時,為資料顯示合計數是一個很有用的功能,在jeecg 的datagrid中實現該功能的效果如圖58所示。
該功能的實現,主要是通過在載入datagrid的資料時,統計出所需的合計值,並放在datagrid物件的footer中。示例程式碼如下:
1 @RequestMapping(params = "datagrid") 2 publicvoid datagrid(JeecgDemo jeecgDemo,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) { 3 CriteriaQuery cq = new CriteriaQuery(JeecgDemo.class, dataGrid); 4 //查詢條件組裝器 5 org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, jeecgDemo); 6 String ctBegin = request.getParameter("createTime_begin"); 7 String ctEnd = request.getParameter("createTime_end"); 8 if(StringUtil.isNotEmpty(ctBegin)&& StringUtil.isNotEmpty(ctEnd)){ 9 try { 10 cq.ge("createTime", new SimpleDateFormat("yyyy-MM-dd").parse(ctBegin)); 11 cq.le("createTime", new SimpleDateFormat("yyyy-MM-dd").parse(ctEnd)); 12 } catch (ParseException e) { 13 e.printStackTrace(); 14 } 15 cq.add(); 16 } 17 this.jeecgDemoService.getDataGridReturn(cq, true); 18 //update-begin--Author:zhaojunfu Date:20130520 for:TASK #109 datagrid標籤沒有封裝合計功能 19 String total_salary = String.valueOf(jeecgDemoService.findOneForJdbc("select sum(salary) as ssum from jeecg_demo").get("ssum")); 20 /* 21 * 說明:格式為欄位名:值(可選,不寫該值時為分頁資料的合計) 多個合計以, 分割 22 */ 23 dataGrid.setFooter("salary:"+total_salary+",age,email:合計"); 24 //update-end--Author:zhaojunfu Date:20130520 for:TASK #109 datagrid標籤沒有封裝合計功能 25 TagUtil.datagrid(response, dataGrid); 26 } |
在該示例程式碼中,需要重點注意的是這裡的第23行:
dataGrid.setFooter("salary:"+total_salary+",age,email:合計"); |
setFooter()方法接收一個字串,其格式為s:欄位名[:值],其中值為選填項,填了則使用給定的值,沒填則自動統計分頁合計,示例:
salary:35.00,age,email:合計 |
這裡將salary的合計值通過查詢資料庫得出,而age則通過當前分頁資料自動合計,email給定一個值“合計”,其作用是在datagrid對應於email列的下方顯示一個說明資訊。