來源於https://my.oschina.net/yunsy/blog/542597
1.MiniUI頁簽定位
<body> <input name = "bizType" class="mini-hidden" value="${bizType}"> <div class="mini-fit" style="margin-top:0px;"> <div id="tabs1" class="mini-tabs" activeIndex="0" style="width:100%;height:100%;" plain="false"> <s:iterator value="@com.ciic.pub.util.Tools@CODE_ITEMS" var="codeItem"> <div title="${codeItem.value }" name="${codeItem.key}" url="${pageContext.request.contextPath}/consignee/batchAction_bizTypeIndex.action?isGrant=${param.isGrant}&isDown=${param.isDown}&bizType=<s:property value="@com.ciic.pub.util.Endecode@base64Encode(#codeItem.key)" />" refreshOnClick="true"></div> </s:iterator> </div> </div> <script type="text/javascript"> mini.parse(); var tab = mini.get("tabs1"); tab.activeTab(tab.getTab(mini.getbyName("bizType").getValue())); tab.load(); </script> </body>
注: refreshOnClick="true"用於tab頁面的選中刷新;
進行tab標簽的定位可以通過以下兩種方法:
1.activeIndex="0"
2.tab.activeTab(tab.getTab(mini.getbyName("bizType").getValue()));
2.MiniUI數據加載
<!--ComboBox:本地數據--> <div field="STATUS" headerAlign="center" align="center" renderer="StatusRenderer">狀態</div> //初始化退票處理狀態 var STATUS = [{ id: 1, text: '已更新' }]; function StatusRenderer(e) { for (var i = 0, l = STATUS.length; i < l; i++) { var g = STATUS[i]; if (g.id == e.value) return g.text; } return ""; } <!--ComboBox:遠程數據--> <input name="STATUS" class="mini-combobox" valueField="id" textField="name" url="../data/AjaxService.aspx?method=GetEducationals" />
3.MiniUI初始化禁用勾選框
<div field="APPROVAL_STATUS" headerAlign="center" align="center" renderer="dealStatusRenderer">處理狀態</div> //未更新數據不允許選中 grid.on("beforeselect", function (e) { if (e.record.APPROVAL_STATUS == null) e.cancel = true; });
4.MiniUI列操作
<div name="action" width="120" headerAlign="center" align="center" renderer="onActionRenderer" cellStyle="padding:0;">操作</div> function onActionRenderer(e) { var grid = e.sender; var record = e.record; var uid = record._uid; var rowIndex = e.rowIndex; var s = ' <a class="Edit_Button" href="javascript:editRow(\'' + uid + '\')" >字段編輯</a> <a class="Edit_Button" href="javascript:conditRow(\'' + uid + '\')" >條件編輯</a><a class="Edit_Button" href="javascript:showRow(\'' + uid + '\')" >查看星形模型</a>'; return s; } //查看星形模型 function showRow(row_uid) { //根據UID獲取行 var row = grid.getRowByUID(row_uid); window.open("/pisa/drawGraph/StartModel.jsp?modelId="+row.tblCode); }
5.MiniUI參數傳遞和接收
function detail(id,status){ mini.open({ url: "<%=path%>/panel/instrumentPanel.do?actPara=toEditInstrumentDetail", title: "儀表盤明細", width: 800, height: 350, onload: function () { var iframe = this.getIFrameEl(); var data = {action: "edit",id:id,status:status}; iframe.contentWindow.SetData(data); }, ondestroy: function (action) { if(action!="cancel") grid.reload(); } }); } //跨頁面傳遞數據對象,克隆后方可安全使用 function SetData(data){ if(data.action=="edit"){ data = mini.clone(data); grid.load({id:data.id,status:data.status}); } }
注:1.父頁面傳值給子頁面
iframe.contentWindow.SetData(data);
父頁面調用子頁面的自定義的SetData(),把data傳遞給子頁面http://www.miniui.com/demo/#src=datagrid/datagrid.html 這里的“編輯”方法
2.子頁面傳值給父頁面
window.Owner.XXXX(data)
子頁面調用父頁面自定義的XXXX(),把data傳遞給父頁面
6.MiniUI表單的加載和保存
創建表單 只需要一個id即可創建表單對象: var form = new mini.Form("#form1"); 加載表單 $.ajax({ url: "../data/FormService.aspx?method=LoadData", type: "post", success: function (text) { var data = mini.decode(text); //反序列化成對象 form.setData(data); //設置多個控件數據 } }); 提交表單 //提交表單數據 var form = new mini.Form("#form1"); var data = form.getData();//獲取表單多個控件的數據 var json = mini.encode(data);//序列化成JSON $.ajax({ url: "../data/FormService.aspx?method=SaveData", type: "post", data: { submitData: json }, success: function (text) { alert("提交成功,返回結果:" + text); } }); 清除表單 form.clear(); 重置表單 form.reset();
7.MiniUI之ComboBox框
ComboBox聯動選擇框 一:創建兩個ComboBox <span>部門</span> <input id="deptCombo" class="mini-combobox" style="width:150px;" textField="name" valueField="id" onvaluechanged="onDeptChanged" url="../data/DataService.aspx?method=GetDepartments" showNullItem="true"/> <span>職位</span><input id="positionCombo" class="mini-combobox" style="width:150px;" textField="name" valueField="id" /> 二:valuechanged加載第二個ComboBox function onDeptChanged(e) { var id = deptCombo.getValue(); positionCombo.setValue(""); var url = "../data/DataService.aspx?method=GetPositionsByDepartmenId&id=" + id positionCombo.setUrl(url); } ComboBox單選框 <input id="combo1" class="mini-combobox" style="width:150px;" textField="text" valueField="id" url="../data/countrys.txt" value="cn" showNullItem="true" /> ComboBox多選 + 多列框 <div class="mini-combobox" style="width:250px;" popupWidth="400" textField="text" valueField="id" url="../data/countrys.txt" value="cn,usa" multiSelect="true" > <div property="columns"> <div header="ID" field="id"></div> <div header="國家" field="text"></div> </div> </div>
8.MiniUI后台數據處理
8.1.Json數據轉換為List
var rows = grid.getChanges();//改變列數據 var rows = grid.getSelecteds();//選中列數據 var data= mini.encode(rows);//序列化成JSON String json = request.getParameter("data"); List list = new ArrayList(); if (StringUtils.isNotEmpty(json)){ json = json.replaceAll(""","\""); list = (List)JSON.Decode(json); }
8.2.Int語句轉換
String[] summaryIds = request.getParameter("summaryIds").split(","); // 對公平台的支出單是以客戶為角度 StringBuffer bufSql = new StringBuffer(); bufSql.append("UPDATE PUB_FS_PAYOUT_BILLS_SUMMARY B SET B.IS_DOWN = '1' ").append(" WHERE 1=1 AND "+Tools.splitInSql(summaryIds,"B.ID")); /** * 由於in子句中超過1000個表達式出錯,先用此方法把in子句拆分成每500一段。 * * @param ids in子句中要排列的字符串數組 * @param fieldName in子句中字段的名稱 * @return 拆分拼寫好的sql語句 */ public static String splitInSql(String[] ids, String fieldName) { StringBuffer sqlStr = new StringBuffer(); if (ids == null || ids.length == 0 || fieldName == null || "".equals(fieldName)) return null; int len = ids.length; int num = 1; if (len > 500) num = (len % 500 == 0) ? len / 500 : (len / 500) + 1; int j = 0; int i = 1; Hashtable hash = new Hashtable(); for (; i <= num; i++) { StringBuffer sb = new StringBuffer(); String str = ""; for (; j < i * 500 && j < len; j++) { if (ids[j] == null || "".equals(ids[j]) || hash.containsKey(ids[j])) continue; sb.append("'").append(ids[j]).append("',"); hash.put(ids[j], ""); } str = sb.toString(); str = str.substring(0, str.length() - 1); sqlStr.append("or ").append(fieldName).append(" in (").append(str) .append(") "); } hash.clear(); hash = null; if (sqlStr.length() > 0) { sqlStr.delete(0, 2); return "(" + sqlStr.toString() + ")"; } else return "(" + fieldName + " in (''))"; }
8.3.批量操作
String[] batchSql = (String[]) sqlList.toArray(new String[0]); int[] status = refurnTicktDAO.getJdbcTemplate().batchUpdate(batchSql);
8.4.插入語句構造
StringBuffer buffer = new StringBuffer(""); buffer.append("INSERT INTO F001(CUSID,F001222,F001223,F001216,F001234,F001220,F001235,F001200,F001215,F001202,F001221,F001246,F001245,F001242,F001236,F001243)VALUES("); int len = 16 - financeInfo.length; //這里的16是指上面插入字段的長度 for(int i=0;i<financeInfo.length;i++){ buffer.append("'"); buffer.append(financeInfo[i]); buffer.append("',"); } if(len > 0){ for(int i = 0;i < len;i++){ buffer.append("'',"); } } String sql = buffer.substring(0,buffer.lastIndexOf(","))+")"; this.execSql(sql);
8.5.MiniUI分頁設置
/** * @param vo 分頁對象 * @param countHql 記錄數語句 * @param queryHql 查詢語句 * @param isAppendOrder 是否在默認排序部分語句追加新的排序 * @return * @throws RollbackableException */ public List pageQuery4Mini(PageVO vo, String countHql, String queryHql, boolean isAppendOrder) throws RollbackableException { Session s; try { SessionFactory sf = (SessionFactory) HrmsContext.getBean("sessionFactory"); s = sf.getCurrentSession(); if(StringUtils.isNotEmpty(vo.getFilterStr())){ String[] filterStr = vo.getFilterStr().split("@"); if(filterStr != null){ StringBuffer sbb=new StringBuffer(); for(int i=0;i<filterStr.length;i++){ String filter[] = filterStr[i].split(":"); if(filter==null || filter.length<2) continue; sbb.append(" and ").append(Tools.filterNull(vo.getPrefix())).append(filter[0]).append(" like '%").append(filter[1]).append("%'"); } queryHql+=sbb.toString(); countHql+=sbb.toString(); } } List list; list = s.createQuery(countHql).list(); int runtimePageSize = vo.getPageCount(); int rSize = Tools.parseInt(list.get(0)); int totalPage = rSize / runtimePageSize; if (rSize % runtimePageSize > 0) totalPage++; if (vo.getPageIndex() > totalPage && totalPage != 0) vo.setPageIndex(totalPage); vo.setTotalRecord(rSize); //默認排序部分語句 String sortPart = vo.getSortPart(); if(isAppendOrder){ //如果是追加 if (StringUtils.isNotEmpty(sortPart)) { queryHql += " order by " + sortPart; if(StringUtils.isNotEmpty(vo.getSortField())) queryHql += "," + Tools.filterNull(vo.getPrefix()) + vo.getSortField() + " " + Tools.filterNull(vo.getSortKeyword());; }else{ if(StringUtils.isNotEmpty(vo.getSortField())) queryHql += " order by "+ Tools.filterNull(vo.getPrefix()) + vo.getSortField() + " " + Tools.filterNull(vo.getSortKeyword());; } }else{ String temp=""; if (StringUtils.isNotEmpty(sortPart)) temp = " order by " + sortPart; if(StringUtils.isNotEmpty(vo.getSortField())) temp = " order by "+ Tools.filterNull(vo.getPrefix()) + vo.getSortField() + " " + Tools.filterNull(vo.getSortKeyword()); queryHql+=temp; } Query q = s.createQuery(queryHql); q.setFirstResult((vo.getPageIndex() - 1) * runtimePageSize); q.setMaxResults(runtimePageSize); return q.list(); } catch (Exception e) { throw new RollbackableException(Tools.getMessageForKey("base_query"), e, this.getClass()); } }
使用分頁設置需要在頁面獲取過濾參數:
function onFilterChanged(e) { grid.load({isMiniui:true,filterStr:getFilterStr}); } /**獲取過濾參數*/ function getFilterStr(){ var filterobj = mini.getsbyName("filterName"); var filterStr = ""; for(var i = 0; i < filterobj.length; i++) { if(i == filterobj.length - 1){ filterStr += filterobj[i].id + ":" + filterobj[i].getFormValue()+""; }else{ filterStr += filterobj[i].id + ":" + filterobj[i].getFormValue() + "@"; } } return filterStr; }