[轉]UAP studio基礎使用技巧
作者:渣成沙
來源:CSDN
原文:https://blog.csdn.net/github_34367377/article/details/82253763
找到前輩寫的uap使用技巧,解決了獲取當前登入使用者問題,開心
1.表格翻頁方法的重寫
me.gridView.getDataGrid().onpageindexchanged.clear(); me.gridView.getDataGrid().onpageindexchanged.addEventListener(me.controller.pageIndexChanged);
2.獲取登陸人資訊
@RequestMapping(value = "/getuserinfo")
public @RawResponseBody Object getuserinfo( ){
Map<String, String> data = new HashMap<String, String> ();
//得到使用者id,登入名
String userId = ClientContextHolder.getInstance().getClientContext().getUserID();
String name = ClientContextHolder.getInstance().getClientContext().getUserName();
try {
List<User> users = AdapterFactory.getIdentityService().getUserByIds(new String[]{userId});
User user = ((User) users.get(0));
String userName = user.getName();
String userMobile = user.getMobile();
String userEmail= user.getEmail();
Department dept = AdapterFactory.getIdentityService().getDepartmentById(user.getBaseOrgId());
可以去的部門的unicode 去o_org表中 判斷org_type 02省 03地市
在前臺判斷頁面的展現即可
String departementName = dept.getName();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return WrappedResult.successWrapedResult(data );
}
3.uap壓縮模式啟動
#前端展現框架是否使用除錯模式,預設為 true,生產環境下建議設定為 false
MX_DEBUGMODE=true
#前端展現框架是否使用壓縮模式載入到瀏覽器端,預設不啟用,建議生產模式啟用
MX_COMPRESSMODE=false
前者設定為false,後者設定為true即可 。
4.jquary方法的使用
jquary
find 搜尋所有與指定表示式匹配的元素。這個函式是找出正在處理的元素的後代元素的好方法。$("p").find("span").onfocus = function(){}
可以轉化為document物件.
5.控制檯列印資訊
console.log()
6.uap錯誤日誌
window show View others 裡面的 error log就有
D:\Users\Administrator\workspace\.metadata 中的.log日誌
7.uap新增log日誌檔案
1.uap專案下修改log4j.properties配置檔案,新增sql所在檔案包路徑節點及輸出方式(檔案)。
### set sql log
log4j.additivity.com.sgcc.mds.lcam=false
log4j.logger.com.sgcc.mds.lcam=debug, lcam
log4j.appender.lcam=org.apache.log4j.RollingFileAppender
log4j.appender.lcam.File=${LOG_DIR}/lcam.log
log4j.appender.lcam.MaxBackupIndex=100
log4j.appender.lcam.MaxFileSize=5000000
log4j.appender.lcam.layout=org.apache.log4j.PatternLayout
log4j.appender.lcam.layout.ConversionPattern=[%d{ISO8601}][%p] %c{1}:%L) %n %m%n
參考附件:
2. 模組專案新增如下log4j依賴:
3. Java類裡新增如下標紅兩行:
4. Sql生成位置新增日誌輸出程式碼:
參考附件:
8.uap白名單配置-越過登陸直接訪問
Applicationconfig.proerties
ISC_EXCLUDEPAGES=/sguap-client/workbench/workbench/login.jsp,\
/mds/portal/portal/login.jsp,\
/ImsBusiness/services,\--wsdl
/mds/smfxjpj/isc_tree/index.jsp,\--頁面
/mds/portal/fromMds/index.jsp
9.uap接入統一認證
ISC_ADAPTER_URL = http://192.168.0.32:7002/isc_frontmv_serv
ISC_LOGINURL = http://192.168.0.32:7002/isc_sso/login
ISC_AUTHMODE = ISC
10.uap中wsdl實現
1.配置org.codehaus.xfire白名單 modulelist的
2.applicationconfig中wsdl路徑白名單
3config下配置xfire
4config下配置service
http://IP地址:埠號/lcamIMS /ImsBusiness/services/MDSWebService?wsdl
5測試新建webservice專案 匯入xfire包
String urlString = "http://localhost:9000/mds/ImsBusiness/services/MDSWebService?wsdl";
Client client;
try {
client = new Client(new URL(urlString));
Object[] results= client.invoke("getKPIValue", new Object[]{xml});
// System.out.println(results[0].toString());
for( Object o : results){
System.out.println(o);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
11.uap中生成42位uuid
12.uap過濾器--用於審計和sql注入校驗
1.config下filter註冊
2過濾配置
3過濾實現
13.uap配置檔案配置常量
public static final String ISC_APPID = PlatformConfigUtil
.getString("ISC_APPID");
14.uap與chart圖整合
首先匯入include(/mds/gg/fusionCharts/FusionCharts.js);
1.初始化容器
me.chaichuChart = new mx.containers.Container({
height:"250px",
width:"650px",
// border:"1px solid #6EC5B9",
left: "300px",
top:"0px",
id :"chaichuChart"
});
2.初始化資料
var params = new Object();
params.items = new Array();
params.items.push({
"stratDate" : me.timeEditor3.value,
"endDate" : me.timeEditor4.value,
"orgNo" : me.controller.drop1_value,
"startAge" : me.drop5.value,
"endAge" : me.drop6.value,
"statusCode" : me.controller.drop2_value
});
// debugger
var client = new mx.rpc.RESTClient({
async : false
});
client.post(chdnbfjqk.mappath("~/rest/removeHomePage/EquipPickPie3D"), JSON
.stringify(params), function(result) {
me.JsonData = result;
});
3 /**
* 放置chart
*/
me.setChartA = function() {
me.chart1 = new FusionCharts("/mds/gg/fusionCharts/Pie3D.swf",
"chartA", "570", "230");
me.chart1.setJSONData(me.JsonData);
me.chart1.render("chaichuChart");
}
15.uap容易新增html程式碼
獲取容器jquary物件的append方法
me.hsplit2.$panel1.append(
"<table style='width: 100%;'><tr><td align='center'>" +
"<div style='position: relative; float: left;width: 100%;padding-left: 33px; top:10px;'>" +
"<div style='position: relative; float: left; margin-left: 70px;'>單位:只</div>" +
"</div>" +
"<div id='chartContainer1' style='width: 100%; height: 100%;'></div>" +
"</td></tr></table>"
);
16表格onload方法 設定表格資料樣式
onload:me.controller._dataGrid_onload
me._dataGrid_onload = function(e){
var v_dataGrid = e.target;
v_dataGrid.$e.find("table>tbody>tr>td").css({"border":"#6ec5b9 1px solid"});
v_dataGrid.$e.find("div#body").css({"overflow-y":"auto","top":"23px"});
v_dataGrid.$bodyTable.find("#rownumber").css("backgroundColor","#E7F8F2");
if(v_dataGrid.displayStatisticRow){
var statist = v_dataGrid.$statisticRow;
//改變統計行的樣式
statist.css({
position:"absolute",
bottom:v_dataGrid.pageNaviBar.height,
border:"1px solid #1B9974"
});
statist.find("tr").css({"backgroundColor":"#E7F8F2"});
statist.find("#rownumber").text("合計");
//移除統計行
statist.remove();
//將統計行重新載入到grid下面
statist.insertAfter("#grid");
//重置grid的bottom樣式
v_dataGrid.$grid.css("bottom",statist.height()+v_dataGrid.pageNaviBar.height);
//統計
var items = v_dataGrid.items;
//申請報廢數
var runQty = 0;
for(var i=0;i<items.length;i++){
runQty += items[i].getValue("appRetQty");
}
//設定統計值
v_dataGrid.columns["appRetQty"].setStatisticValue(runQty);
v_dataGrid.columns["appRetQty"].setStatisticAlign("center");
//已報廢數
var ybfs = 0;
for(var i=0;i<items.length;i++){
ybfs += items[i].getValue("finishRetQty");
}
//設定統計值
v_dataGrid.columns["finishRetQty"].setStatisticValue(ybfs);
v_dataGrid.columns["finishRetQty"].setStatisticAlign("center");
}
17.uap匯出功能
匯出方法1
/**
* 匯出Excel
*
//匯出時間
var date = new Date();
//年份
var year = date.getFullYear();
//月份
var month = date.getMonth()+1;
//第幾日
var day = date.getDate();
var time = year+"-"+month+"-"+day;
//過濾條件
var v_dataGrid = me.view.getDataGrid();
//列名
var columns = "";
//列標題
var columnCaptions = "";
//列寬度
var columnWidths = "";
//檔名稱
var fileName = "報廢數量單位分佈";
//檔案標題
var fileTitle = "報廢數量單位分佈";
//獲取列名,列標題,列寬度
for(var i=0;i<v_dataGrid.columns.length-1;i++){
if(v_dataGrid.columns[i].name == v_dataGrid.primaryKey){
continue;
}
columns += v_dataGrid.columns[i].name + ",";
columnCaptions += v_dataGrid.columns[i].caption + ",";
columnWidths += "100,";
}
columns = columns.substring(0,columns.length-1);
columnCaptions = columnCaptions.substring(0,columnCaptions.length-1);
columnWidths = columnWidths.substring(0,columnWidths.length-1);
//查詢條件
var filter = new Object();
filter.orgNo = me.orgNo;
filter.mdType = me.mdType;
filter.bidBatchNo = me.bidBatchNo;
filter.arriveNo = me.arriveNo;
filter.supplierNo = me.supplierNo;
filter.tjksrq = me.tjksrq;
filter.tjjzrq = me.tjjzrq;
//選中的列名
filter.columns = me.columns;
//匯出標記,使用它便於區分匯出還是查詢
filter.exportFlag = true;
//匯出 com.sgcc.mds.lcam.lcEquipRetired.LcEquipRetiredController.exportExcel
var jsonObject = {
id : "equipInstGuidOut",//不重複的ID
className:"equipInstController",//相應的.java檔案
queryMethod:"exportExcel",//查詢方法 autoFilter:true,
queryMethodParamType:1,
columns:columns,
columnCaptions:columnCaptions,
columnWidths:columnWidths,
fileName:fileName,
fileTitle:fileTitle,
fileTime:time,
isMerge:"false",
statisticCols:"appRetQty,finishRetQty",
filter:filter
};
//匯出控制元件
me.exportXSLUtil = new common$util.excel.ExportXSLUtils({
jsonObject:JSON.stringify(jsonObject)
});
me.exportXSLUtil.exportExcel();
}
Config下
後臺controller
/**
* 匯出表格
* @param params 查詢條件
* @param p_request
* @return QueryResultObject 列表資料
*/
@RequestMapping("/exportExcel")
public @ItemResponseBody
QueryResultObject exportExcel(@QueryRequestParam("params") RequestCondition params,HttpServletRequest p_request){
return query(params);
}
匯出方法2
me.btn_daochu_click = function(){
var itemCount = me.view._dataGrid.itemCount;
if(itemCount==0){
mx.indicate("info","無查詢結果,查詢後再進行操作!");
return;
}/*else if(itemCount>2000){
mx.indicate("info","資料量過大,請縮小查詢範圍!");
return;
}*/else{
var pathName = window.document.location.pathname;
var projectName = pathName.substring(0,pathName.substr(1).indexOf('/')+1);
var baseUrl = projectName+"/zczt/test/Zc_Servlet?" +
"wd="+wd+"&rmv_reason="+me.view.drop1.value+"&type_code="+me.view.drop2.value+"&OrgNo="+me.view.drop3.value
+"&asset_sort="+me.view.drop4.value+"&bid_batch_name="+me.view.drop5.value+"&arrive_no="+me.view.drop6.value+"&biaozhiwei="+"chqk"+
"&supplier_no="+me.view.drop7.value+"&stat_ymQS="+me.view.timeEditor8.value+"&stat_ymJZ="+me.view.timeEditor9.value;
// window.location.href = baseUrl;
var httpurl=sheiBeizk.mappath(baseUrl);
window.open(httpurl,
"顯示視窗","height=1px, width=1px, top=10000px, left=100px, toolbar=no, menubar=no, scrollbars=yes, resizable=no, location=no, status=no");
}
};
18 uap下載功能
Uap專案下webcontent下建資料夾放下載內容 servlet實現
19.tab中text自適應屬性
“max-width” : “100%”
一.uap初級使用
1.佈局控制元件
建立一個佈局控制元件主要包括以下步驟:
匯入所需的js類。
建立例項。
將例項新增到容器中。
1.1上下分割窗口布局
//1.匯入類程式碼
$import("mx.containers.HSplit");
//2. 建立例項
me.hsplit = new mx.containers.HSplit({
rows: “300, auto“ ,//視窗的兩部分大小
borderThick:”0px”//設定邊框粗細
});
//3.將例項新增到容器中
me.addControl(me.hsplit);
1.2左右分割窗口布局
//1.匯入類程式碼
$import("mx.containers.VSplit");
//2. 建立例項
me.vsplit = new mx.containers.VSplit({
cols: “300, auto“ //視窗的兩部分大小
});
//3.將例項新增到容器中
me.addControl(me.vsplit);
**vsplit整體左邊距設定,和左邊框線的設定
me.vSplit2 = new mx.containers.VSplit({
cols:"12%,88%",
width:"50%",
top:"0%",
position:"absolute",
borderThick:2
});
vsplit整體左邊距設定,和左邊框線的設定
me.vSplit2.setLeft("50%");
me.vSplit2.$panel1[0].style.borderLeftWidth = "1px";
1.3手風琴式選單
//1.匯入類程式碼
$import("mx.containers.Accordion");
//2. 建立選單例項
me.accordion = new mx.containers.Accordion(
{
"height":"60%",
"width":"20%",
panels:[
{ title: "綜合評價", name: "zhpj" },
{ title: "參建隊伍", name: "cjdw" }
],
onselectionchanged:me.controller.accordionChanged
}
);
//3.將例項新增到容器中
me.addControl(me.accordion);
me.addControl.appendPanel({name:"panel3", title:"面板3"});
var text = new mx.editors.TextEditor({ value: "bruce" });
me.addControl.panels[0].addControl(text);
1.4Tab頁
(1)建立tablePage加入tabCotrol
自己生成新的頁面加入顯示
$import("mx.containers.TabControl");//記得導包
me.tab = new mx.containers.TabControl({
pages:[
{ text: "常規", name: "general" },
{ text: "角色", name: "role" }
],
onselectionchanging: me.controller._selection_changing,
onselectionchanged: me.controller._selection_changed
});
if(me.pageTwo == null){ //如果第二個page不存在
//建立第二個tablePage加入tableCotrol me.pageTwo=me.view.tabControl.appendPage(text,text);//,true;
initTableTwo();
me.pageTwo.init();//非第一個頁面記得要先初始化一下
me.pageTwo.addControl(me.hSplit);
//顯示第二個
me.view.tabControl.selectPage(1);
1.5.lable
Label5.$e[0].style.cursor="pointer";
定義點選事件:
Label5.$e.on("mouseenter",me._onmousemove);
@.或onclick: me.controller.detailOnclick
autoWrap :true, //表示標籤文字是否自動換行
1.6panel
//去除panel2右側的檢視
me.view.vsplit2.removeControl(me.view.vsplit2.controls[4]);
me.view.vsplit2.addControl( me.getSingleIdx(),1);
2. 建立一個表格
建立一個表格主要也包括以下步驟:
匯入建立表格所需的js類。
定義與表格互動資料的伺服器url。
建立表格資料容器。
建立表格例項
呼叫表格load方法。
將表格新增到容器中。
//1.匯入類程式碼
$import("mx.datacontainers.GridEntityContainer");
$import("mx.datacontrols.DataGrid");
//2.定義服務端url
var restUrl = "~/mxdemo/rest/uapsb/";
/* 初始化表單資料容器EntityContainer */
me.gridEntityContainer=new mx.datacontainers.GridEntityContainer({
baseUrl : restUrl,
iscID : "-1", // iscID 是資料元素的統一許可權功能編碼。預設值為 "-1" ,表示不應用許可權設定
loadMeta :false //不會更新資料庫驗證欄位
primaryKey: "objId"
});
//3. 建立表格例項
//4. 建立表格例項
me.dataGrid = new mx.datacontrols.DataGrid({
columns:[
{name: "objId", caption: "主鍵" , editorType: "TextEditor"},
{name: "mc", caption: "裝置名稱 " , editorType: "TextEditor"},
{name: "sbxh", caption: " 裝置型號" , editorType: "TextEditor"},
{name: "bdz", caption: "變電站 " , editorType: "TextEditor"},
{name: "jgdy", caption: "間隔單元" , editorType: "TextEditor"},
{name: "azrq", caption: "安裝日期" , editorType: "TextEditor"},
{name: "sblx", caption: "裝置型別" , editorType: "DropDownEditor"},
{name: "sfzy", caption: "是否在用" , editorType: "DropDownEditor"},
{name: "ssbm", caption: "所屬部門" , editorType: "DropDownEditor"},
{name: "sfwx", caption: " 是否已維修" , editorType: "DropDownEditor"},
{name: "sysm", caption: "使用說明" , editorType: "TextEditor"}
],
displayCheckBox: true,
displayPrimaryKey:false,//列表是否顯示主鍵
allowEditing: true, //列表預設不可編輯
entityContainer: me.gridEntityContainer({
type : "local",
primaryKey : "objId",
onload : me.controller._datagridEntityContainer_onload // 列表容器載入資料
}),
onpageindexchanged : me.controller._datagrid_onpageindexchanged//分頁
onitemclick :me.controller._dataGrid_onClick //定義 表格點選事件
});
//5.呼叫表格load方法
me.dataGrid.load();
//6.將表格新增到頁面上
me.addControl(me.dataGrid);
controller:
// 列表容器載入資料(不常用)
me._datagridEntityContainer_onload = function(e) {
if(me.view.danwei.value!=me.orgcode){
e.target.dicts = me.organdict1;//資料字典
e.itemCount = me.itemCountCx;
e.items = me.dataCx;
}else{
e.target.dicts = me.organdict;//資料字典
e.itemCount = me.itemCountCx;
e.items = me.dataCx;
}
}
// 分頁
me._datagrid_onpageindexchanged = function(e) {
Query(me.filtercx, e.target.pageIndex, e.target.pageSize,true);
}
2.1ToorBar
mx.controls.ToolBar
var toolBar = new mx.controls.ToolBar(
{
items :
[
{
name : "menuGroup",//選單項的唯一標識
toolTip : "選單分組",
imageKey : "new",
text : "選單分組",
items :
[
{
name : "childMenu1",
toolTip : "子選單1",
imageKey : "new",
text : "子選單1"
},
{
name : "childMenu2",
toolTip : "子選單2",
imageKey : "new",
text : "子選單2"
}]
},
"-",//橫線表示顯示分隔線
{
name : "menu1",
toolTip : "主選單1",
imageKey : "new",
text : "主選單1"
},
{
name : "menu2",
toolTip : "主選單2",
imageKey : "new",
text : "主選單2"
}]
});
例:
var toolBar = new mx.controls.ToolBar(
{
items :
[{ name : "menuGroup",//選單項的唯一標識
toolTip : "儲存",
imageKey : "save",
text : "儲存"
}]
});
//將toolBar置為空白 setDisplay or setVisible
me.proView.getDataGrid().toolBar.setDisplay("none");
//將toolBar高度設為空
me. proView.getDataGrid().toolBar.resizeTo("100%", "0%");
//調整高度
me. proView.getDataGrid().$grid.animate({top : 1},"fast"); (26為:距上邊框距離)
增添:
_dataGrid.toolBar.insertItem(2,"-",true); 分割線
_dataGrid.toolBar.insertItem(3, 新增編輯按鈕
{ name: "edit", text: mx.msg("EDIT"), toolTip: mx.msg("EDIT"), imageKey : "edit",
onclick: me.controller._btnEdit_onclick},true);
_dataGrid.toolBar.insertItem(4,{ name: "fqlc", text: "發起流程",toolTip:"發起流程",imageKey : "edit",onclick: me.controller._btnFqlc_onclick},true);
刪除:
_dataGrid.toolBar.removeByIndex(1);
_dataGrid.toolBar.removeByName("save");
Editor型別:獲取或設定編輯器的型別
CheckEditor
TextEditor 文字框
DateTimeEditor DATETIME 日期時間。例如:2007-07-01 14:28:32
DropDownEditor 下拉框
LinkEditor
NumberEditor 數字編輯器
TimeEditor TIME 時間。例如:14:28:32
預設值:TextEditor
2.2隱藏searchBox
//將searchBox置為空白 setDisplay or setVisible
me.projunitDetailView.getDataGrid().searchBox.setDisplay("none");
//將searchBox高度設為空
me.projunitDetailView.getDataGrid().searchBox.resizeTo("100%", "0%");
//調整高度
me.projunitDetailView.getDataGrid().$grid.animate({top : 26},"fast"); (26為:距上邊框距離,消除toolBar時,方法類似,此值可設為1 )
2.3單元格浮動提示框
//表格載入完事件
me._dataGrid_onLoad = function(p_item, $p_cell)
{
//滑鼠移動時的提示狂
me.qxmsDiv = $("<div style='padding:2px;background-color:#ffffff;border:1px solid;position:absolute'></div>");
me.view.append(me.qxmsDiv);
//繫結滑鼠經過移出事件 me.view.getDataGrid().$bodyTable.find('#biaoti').on("mouseover",me._jymsonmouseover);
me.view.getDataGrid().$bodyTable.find('#biaoti').on("mouseout",me._jymsonmouseout);
}
//滑鼠經過事件
me._jymsonmouseover = function(e){
if(e.target.innerText!=null&&e.target.innerText.length>0){
me.qxmsDiv[0].style.display = "";
me.qxmsDiv[0].innerText = e.target.innerText;
me.qxmsDiv[0].style.left=e.clientX+"px";
me.qxmsDiv[0].style.top=e.clientY+"px";
}else{
me.qxmsDiv[0].style.display = "none";
}
}
//滑鼠移出
me._jymsonmouseout = function(e){
me.qxmsDiv[0].style.display = "none";
}
(1)得到DataGrid選擇行的第二列的值
var proid = me.view.getDataGrid().selection.getValue(1);
(2)點選DataGrid行事件
function(e)
var proid = e.item.getValue(1);
2.4表格渲染,超連結
renderCell(p_item, $p_cell) 方法:
將p_item 中該列的值渲染到 $p_cell 指定的單元格中。可通過重寫該方法實現自定義渲染的效果,例:
columns:[
{name: "objId", caption: "員工OBJ_ID" , editorType: "TextEditor"},
{name: "ssbm", caption: "所屬部門", editorType: "DropDownEditor"},
{name: "xm", caption: "姓名" , editorType: "TextEditor"
//有個問題:點選上面的張三,傳的是下面的李四//解決:將全域性改為區域性,然後在方法中傳參
,renderCell:function(p_item, $p_cell){
var value = p_item.getValue("xm");// 獲取xm欄位的顯示值。
var itemId = p_item.id; //獲取行item的標示值
if (value != null){
// 根據 value 的值,決定 $p_cell 中的 HTML 內容。
$p_cell.text(value);
$p_cell[0].style.color="blue";
$p_cell[0].style.textDecoration="underline";
$p_cell[0].style.cursor="hand";
$p_cell[0].onclick=function(){
me.controller._item_onclick(itemId);
}
}else{
// 如果該值為空,則清空單元格的內容。
$p_cell.empty();
}
}
例:
{ name: "goodsPrice", caption: "價格" , editorType: "TextEditor",
renderCell:function(p_item,$p_cell){
var price = p_item.getValue("goodsPrice"); // 獲取 goodsPrice 欄位的值。
var id = p_item.getValue("goodsId");
me.itemId = p_item.id;//獲取行item的標示值
if (price != null)
{
// 根據 value 的值,決定 $p_cell 中的 HTML 內容。
$p_cell.text(price);
$p_cell.css({"backgroundColor":"#9FC",color:"blue","cursor":"hand","textDecoration":"underline"});
$p_cell[0].onclick=function(){
me.controller._item_onclick(id,price);
};
}
else
{
// 如果該值為空,則清空單元格的內容。
$p_cell.empty();
}
// me.controller._item_onclick
me._item_onclick=function(id,price){
var id1=id;
var options = {title:"價格",reusable: true, width:"400", height:"50%",
displayMaxButton:true,resizable:false
};
me.win= new mx.windows.WindowManager().create(options);
me.win.showDialog();
me.labelmc = new mx.controls.Label({
text : "價格:",
textAlign : "center",
verticalAlign : "middle",
top : "60px",
left : "10px"
});
var toolBar = new mx.controls.ToolBar({});
var numberEditor = new mx.editors.NumberEditor({
value:price,
top : "60px"
});
numberEditor.init();
me.win.addControl(toolBar);
me.win.addControl(me.labelmc);
me.win.addControl(numberEditor);
me.win.showDialog(function(){
me.view.getDataGrid().load();
});
/////
var btnSave = toolBar.appendItem("save", mx.msg("SAVE"));
btnSave.alias = "goodsDetailViewBtnSave";
btnSave.setImageKey("save");
btnSave.on("click",function(){
var text=numberEditor.getValue();
var _dView = me._getDetailFromView();
var datailForm =_dView.getForm();
datailForm.load(id1,function(){
datailForm.entityContainer.setValue("goodsId",id1);
datailForm.entityContainer.setValue("goodsPrice",text);
datailForm.entityContainer.save();
me.win.close();
// me.view.getDataGrid()._columns[2]=numberEditor.getValue();
mx.indicate("info","儲存成功");
});
});
}
}
2.5表格選中事件
//表格選中事件
me.itemChecked = function(e){
var items = me.view._dataGrid.getCheckedItems();
if(items.length > 1){ //只能選擇一行,
items.removeAt(0);
me.view._dataGrid.uncheckAll();
}
e.item.setChecked(true);
me.bar_code = e.item.values.bar_code;
// me.ARRIVE_BATCH_NO = e.item.values.ARRIVE_BATCH_NO;
}
3.建立一個表單
建立一個表單主要包括以下步驟:
匯入建立表單所需的js類。
定義與表單互動資料的伺服器url。
建立表單資料容器。
建立表單例項。
切記表單要load才能顯示。
將表單新增到容器中
//1.匯入類程式碼
$import("mx.datacontrols.DataForm");
$import("mx.datacontainers.FormEntityContainer");
//2.定義服務端url
var restUrl = "~/mxdemo/rest/uapsb/";
//3.建立表單資料容器
/* 初始化表單資料容器EntityContainer */
me.formEntityContainer = new mx.datacontainers.FormEntityContainer({
baseUrl : (weblet的ID值).mappath(restUrl),
primaryKey: "objId" });
//4. 建立表單例項
me.form = new mx.datacontrols.DataForm({
fields: [
{name: "objId", caption: "主鍵", editorType: "TextEditor", visible:false},
{name: "mc", caption: "裝置名稱 ", editorType: "TextEditor"},
{name: "sbxh", caption: "裝置型號", editorType: "TextEditor"},
{name: "bdz", caption: "變電站 ", editorType: "TextEditor"},
{name: "jgdy", caption: "間隔單元", editorType: "NumberEditor","width":"145px"},
{name: "azrq", caption: "安裝日期", editorType: "DateTimeEditor","width":"145px"},
{name: "sblx", caption: "裝置型別", editorType: "DropDownEditor","width":"145px"},
{name: "sfzy", caption: "是否在用", editorType: "DropDownEditor","width":"145px"},
{name: "ssbm", caption: "所屬部門", editorType: "DropDownEditor","width":"145px"},
{name: "sysm", caption: "使用說明", editorType: "TextEditor"}
],
entityContainer: me.formEntityContainer
});
// 5.表單要load才能顯示
me.form.load();
//6.將表單新增到頁面上
me.addControl(me.form);
3.1表單彈窗檢視
列表顯示資料。
列表新增資料,以表單形式新增。
列表編輯資料, 以表單顯示資料。
新增資料:
// 新增按鈕點選事件
me._btnNew_onclick = function()
{
//通過檢視控制器獲取檢視物件
var mvc = new form.views.FormDetailViewController();
var _detailView = new mvc.getView();
_detailView.objID = null;
//將檢視物件展現出來
me._showView(_detailView);
};
me._showView = function(p_view)
{
//TODO: 表單檢視儲存後事件處理。
p_view.formEntityContainer.on("saved", function(e){
mx.indicate("info","儲存成功");
me.view.dataGrid.load();
me.view.hsplit.removeControl(p_view);
});
//載入詳細資訊頁面物件。
p_view.load();
if(me.view.hsplit.controls.length<3){
//將表單檢視物件新增到hsplit中
me.view.hsplit.addControl(p_view,1);
}
}
3.2表單面板
定製一個表單面板主要包括以下步驟:
匯入建立表單面板所需的js類。
定義與表單互動資料的伺服器url。
建立表單資料容器。
建立表單例項,註冊面板所在目錄url。
切記表單要load才能顯示。
將表單新增到容器中。
//1.匯入類程式碼
$import("mx.datacontainers.FormEntityContainer");
$import("mx.datacontrols.SkinDataForm");
//2.定義服務端url
var restUrl = "~/mxdemo/rest/uapsb/";
//3.建立表單資料容器
/* 初始化表單資料容器EntityContainer */
me.formEntityContainer = new mx.datacontainers.FormEntityContainer({
baseUrl : (weblet的ID值).mappath(restUrl),
primaryKey: "objId" });
//4. 建立表單面板例項
me.skinForm=new mx.datacontrols.SkinDataForm({
skinUrl:“~/mxdemo/form/resources/skins/form.html”, //參見專案檔案
entityContainer: me.formEntityContainer
});
// 5.表單要load才能顯示
me. skinForm.load();
//6.將表單新增到頁面上
me.addControl(me. skinForm);
3.3在表單中 檔案上傳
JavaScript 程式碼
var dataForm = new mx.datacontrols.DataForm( {
fields: [ {
name: "deptId",
caption: "DEPT_ID",
editorType: "TextEditor",
visible: false
}, {
name: "deptName",
caption: "DEPT_NAME",
editorType: "FileEditor",//型別為檔案編輯器
type: "form",//型別宣告為 form
uploadMode: "file",//儲存方式為file,檔案會儲存到伺服器指定磁碟路徑;為blob會儲存到資料庫的BLOB型別欄位中。
tableName: "DEPT",//資料對應的表名,必須是資料庫中的物理表名
primaryKey: "DEPT_ID",//資料表的主鍵欄位名
colName: "DEPT_NAME"//當前欄位在資料庫中的物理名稱
} ],
entityContainer: me.formEntityContainer
});
(1)回撥函式
me._btnNew_onclick = function()
{
var _detailView = me._getDetailFromView();
//獲得電站所屬網省proid(tree顯示值)
var proid = me.controller.getTreeText();
//此處呼叫的是_detailView中的load方法,見下
_detailView.load(function(){
//給proid這行賦值
_detailView.getForm().editors["proid"].setValue(proid,true);
//設定proid這行只讀
_detailView.getForm().getEditor("proid").setReadOnly(true);
//設定proid這行不可見
_detailView.getForm().getEditor("proid ").setVisible(false);
});
//設定物件id
_detailView.objID = null;
_showDetailFormView(_detailView,"表單填寫");
};
//_detailView中的load方法(需要加入引數)
me.load = function(callback)
{
debugger;
//_form.editors["proid"].setValue(e);
//載入表單資訊
_form.load(me.objID,function(){
if(callback && callback instanceof Function){
callback();
}
});
}
3.4載入 表單 賦值/ 賦 時間值
//MainView.js
//員工 檢視
me.empMvc = new emp.views.MainViewController();
me.empView = me.empMvc.getView();
//MainViewController.js
//樹 節點 改變
me._tree_selectionchanged = function(e)
{
me.id = e.selection.id;
//員工 詳細頁面 me.ssbm 變數賦值
me.empDetailView = new me.view.depMvc._getDetailFromView;
me.empDetailView.ssbm = depId;
}
//DetailView.js
me.load = function()
{
//載入表單資訊
_form.load(me.objID,
function ()
{
//時間 賦值
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1;
var day = date.getDate();
var time = year+"-"+month+"-"+day;
_form.editors.skmc.setValue(me.skmc);
_form.editors.ksrq.setValue(time);
_form.editors.jsrq.setValue(time);
//不可修改
_form.editors.skmc.setReadOnly(true);
_form.entityContainer.setValue("skmc",me.skmc);
_form.entityContainer.setValue("ksrq",time);
_form.entityContainer.setValue("jsrq",time);
}
);
}
3.5表單列印
var printCon = new mx.utils.PrintUtil({
dataControl : me.view.getForm(),
maxCols : 2,
printHideFields : true
});
printCon.printControl();
3.6表單驗證
Var numberEditor = new mx.editors.NumberEditor({
min: 10,
increment: 1,
onchanged: _numberEditor_changed
});
_form = new mx.datacontrols.DataForm({
width: 500,
fields:
[ { name: "bdzbh", caption: "變電站編號", readOnly: true , nullable: false} ],
onvalidate : form_validate,
entityContainer: formEntityContainer // 繫結表單資料容器
});
function form_validate()
{
alert("validate:" + mx.utils.CheckUtil.isEmail(_form.editors["bdzbh"].value));
}
{name: "note", caption: "備註" , editorType: "NumberEditor", formatString:"0.00",
customValidate:function(p_editor){
var check = new mx.utils.CheckUtilClass();
var result = check. isDigit (p_editor.value);
return { successful: result, hint:"驗證失敗!" }
}
},
{name: "email", caption: "郵箱", editorType: "TextEditor", validType:"EMAIL",validateMessage :"請輸入有效郵箱"},
{name: "phone", caption: "手機", editorType: "TextEditor", validType:"MOBILE",lineBreak:false},
{name: "identitycardId", caption: "身份證號", editorType: "TextEditor",validType:"IDCARD",onchanged:birth}//自定義方法
//身份證 號碼 改變事件
function birth(e)
{
var idcard = e.target.value;
var year = idcard.substring(6,10);
var mouth = idcard.substring(10,12);
var day = idcard.substring(12,14);
var birthday = year+"-"+mouth+"-"+day;
_form.editors.birthday.setValue(birthday);
_form.entityContainer.setValue("birthday",birthday);
}
3.7表單樣式設定
<DIV class=container style=\"MARGIN-LEFT: 15px; MARGIN-RIGHT: 5px\">
<LABEL title=圖例位置: style=\"WIDTH: 120px\">圖例位置:</LABEL>\r\n
<DIV class=editor style=\"MARGIN-LEFT: 120px\">\r\n
<DIV class=comboEditor style=\"HEIGHT: 21px; WIDTH: 100%\" >\r\n
<DIV id=inputContainer><INPUT type=text value=圖形上方 ></DIV>
//載入表單資訊,
_form.load(me.objID,function(){
//設定 行 高度
_form.$e.find("td").css({
"padding-top":"12px",
"text-align":"left"
});
//右邊距
_form.$e.find("td>div").css({
"margin-right":"20px"
});
//上邊距
_form.$e.find("td:eq(1)").css({
"padding-top":"30px",
});
//文字標題
_form.$e.find("label").css({
"width":"105px",
"text-align":"right"
});
//輸入框
_form.$e.find(".editor").css({
"width":"130px",
"margin-left": "110px"
});
me.form.$e.find(".editor input").css({
"border":"1px solid lightgray"
});
});
//dataForm整體左邊距
_form.setCss({"marginLeft":"10px"});
3.8.修改表單樣式
*/
function _setFormStyle(form) {
form.$e.find("table").find("#jsgs")[0].style.paddingTop="29px";
form.$e.find("table").find("#jsgs")[0].style.paddingBottom="29px";
// var flag = 0;
// for ( var i = 0; i < form.$e.find("table").find("tr").length; i++) {
// // Label右對齊
// form.$e.find("label").css("text-align", "right");
// // 隔行變色
// if (i % 2 == 0) {
// form.$e.find("table").find("tr")[i].style.backgroundColor = "#E4F2F6";
// }
//// flag = flag
//// + form.$e.find("table").find("tr")[i]
//// .getElementsByTagName("label").length;
// }
}
//////////////////////////////////////////
var perwidth = document.body.clientHeight*0.08;
{ name: "wscgbm", caption: "網省採購申請編號",editorType: "TextEditor",height:perwidth,textMode : "multiline",readOnly: true},
{ name: "zbms", caption: "指標描述", editorType: "TextEditor",textMode : "multiline",colSpan:3,width : "80%",readOnly:true},
{ name: "jsgs", caption: "計算公式", editorType: "TextEditor", textMode : "multiline",colSpan:3,width : "80%",readOnly:true},
textMode:文字框型別 normal(預設),password,multiline(多重線)
colSpan: 獲取和設定欄位列跨度屬性(預設1),即長度,
textMode : "multiline",colSpan:3表示上下佔三行
height:perwidth,textMode : "multiline",lineBreak:false (上下佔兩行,並能換行,)
var labels = me.form.$e.find("label");
var length = labels.length;
for(var i=0; i<length; i++)
{
var labelName = labels[i].innerText;
var labelName2 = labelName.substring(0,labelName.length-1);
labels[i].innerText = labelName2;
}
4、建立樹
建立一棵樹主要包括以下步驟:
匯入所需的js類。
定義與樹互動資料的伺服器url。
呼叫樹的load方法。
將樹例項新增到容器中。
//1.匯入類程式碼
$import("mx.datacontainers.TreeEntityContainer");
$import("mx.datacontrols.DataTree");
//2.定義服務端url
var restUrl = "~/mxdemo/rest/uapbm/tree”;//路徑為樹場景 生成的java 後臺方法
//3. 建立樹例項
me.treeView = new mx.datacontrols.DataTree({
baseUrl: restUrl,
displayCheckBox: true, // 是否需要在樹中顯示選中框
onselectionchanged: me.controller._tree_selectionchanged
});
//4. 呼叫樹的load方法
me.treeView.load();
//5.將樹例項新增到頁面上
me.addControl(me.treeView);
/******** 樹節點選中事件 **********/
me._tree_selectionchanged = function(e)
{
if(e.selection.hasChildren){ //如果選中節點有子節點,則展節點
e.selection.expand(); //展開該節點
}
switch(e.selection.itemType) //根據返回的itemType,設定不同的業務邏輯
{
case “uapbm”: //選中節點為部門節點,則初始化部門表
_initDepartView(e.selection.id);
break;
case “uapsb”: //選中節點為裝置節點,則初始化裝置檢視
_initDeviceView(e.selection.id);
break;
}
};
4.0在別的場景裡呼叫樹場景
1. /////// 示例
me._depTree=new mx.datacontrols.DataTree({
baseUrl:main.mappath("~/rest/depttree/tree"),//生成樹場景路徑
displayCheckBox: false,// 是否需要在樹中顯示選中框
onselectionchanged: me.controller._tree_selectionchanged
//在mainviewcontroller中新增方法
});
me._depTree.load(); //**
me.vSplit.addControl(me._depTree,0);
2. ////
idxTreeView = new zhibiaoxz.views.TreeViewController().getView();
idxTreeView.getTreeView().displayCheckBox = true;
4.1實現樹節點示例定位
實現樹節點示例定位主要包括以下步驟:
建立一顆樹。
前端傳送輸入請求資料到伺服器端。
伺服器端接收資料並處理、返回。
前端接收並處理
前端傳送請求資料到伺服器端:
me._btnLocate_click=function(){
//獲取輸入值
var nodeValue=me.view.textEditor.value;
//建立ESTClient例項,用於傳送請求
var restClient=new mx.rpc.RESTClient();
restClient.get(
“~/mxdemo/rest/uapbm/tree/check”, //請求url
{ nodeName: nodeValue}, // 將 appSuite 先轉換為 JSON 字串,然後作為 POST 引數 傳遞到服務端
function(p_context) // 回撥函式,p_context為返回資料
{
if(p_context!=null){
for(var i=0;i<p_context.length;i++){
var node = me.view.treeView.findNode(“#”+p_context[i]); //查詢節點
node.expand(); //展開節點
me.view.treeView.selectNode(node, false); //選中節點
}
}
else{
alert("REST 服務呼叫失敗。");
}
} // End of callback function
); // End of client.post
}
服務端Controller層接收並處理前端請求 : @RequestMapping(value="/tree/check",method=RequestMethod.GET)
@RawResponseBody
public Object findNode(@RequestParam("nodeName") String nodeName){
List idList = treeBizc.findNodeId(nodeName);
if(idList.size()!=0){
return idList;
}
else{
return null;
}
}
服務端Biz層訪問資料庫:
public List findNodeId(String nodeName){
String sql="select obj_id from uap_bm where bmmc like '%"+nodeName+"%'";
List idList = hibernateDao.executeSqlQuery(sql);
return idList;
}
mx.utils.CheckUtilClass提供一個檢查字串格式的工具類。該類在執行時唯一靜態例項是 mx.utils.CheckUtil 物件。
$import("mx.utils.CheckUtilClass");
check=new mx.utils.CheckUtilClass();
alert(check.isEmail(a));
alert(check.isDigit(a));
if(check.isDigit(a)==true){
me.view.form.save();
}else{
alert("註冊資金必須是數字");
me.view.form.getEditor("regMoney").focus();
}
4.2樹節點重新整理
me.view._depTree.getNode(selId).refresh();
// me.view._depTree.getNode(selId).expand();
// me.view._depTree.selection.parent.refresh();
// me.view._depTree.selection.parent.expand();
// me.view._depTree.selection.refresh();
// me.view._depTree.selection.select();
me.view._depTree.selection.refresh();
me.view._depTree.selection.select()
二、方法
5.1樹表聯動 tab頁切換
//定義 全域性變數
Var selId = null; //方法外定義變數 或 方法內定義 me.selId
me._tree_selectionchanged = function(e)
{
//節點 id
selId = e.selection.id;
//樹節點 員工
if(e.selection.itemType == "emp")
{
var empId = e.selection.id;
me.view.tabControl.pages[1].hide();
me.view.tabControl.pages[0].show();
me.view.tabControl.selectPage(me.view.tabControl.pages[0],true);
//員工 詳細資訊 顯示
me.view.tabControl.pages[0].removeControl(me.view.depDetailView);
me.view.tabControl.pages[0].addControl(me.view.empDetailView);
//載入 員工詳細資訊
me.view.empDetailView.objID = empId;
me.view.empDetailView.load();
}
//樹節點 部門
if(e.selection.itemType == "dept")
{
me.view.tabControl.pages[0].show();
me.view.tabControl.pages[1].show();
var depId = e.selection.id;
var text = e.selection.text;
//部門檢視 上級部門 變數
me.view.depDetailView.ssbm = depId;
var tabControl = me.view.tabControl.selection;
if(tabControl.name == "emp")
{
//員工列表 顯示
me.view.tabControl.pages[1].addControl(me.view.empView);
me.view.empView.getDataGrid().setFilter({ssbm:depId});
me.view.empView.getDataGrid().load();
}
else
{
me.view.tabControl.pages[0].removeControl(me.view.empDetailView);
me.view.tabControl.pages[0].addControl(me.view.depDetailView);
//載入 部門詳細資訊
me.view.depDetailView.objID = depId;
me.view.depDetailView.load();
}
}
}
5.2Toolbar方法
5.2.1重置新建方法 新建插入行
//重新定義新建事件
me.empGrid.toolBar.items["#new"].off("click", me.controller._btnNew_onclick);
me.empGrid.toolBar.items["#new"].on("click", me.controller._btnNew1_onclick);
//去除新建按鈕
me.empView.getDataGrid().toolBar.removeByIndex(0);
me.empView.getDataGrid().toolBar.removeByName("new");
//插入新建按鈕
me.empView.getDataGrid().toolBar.insertItem(0,"-",true);
me.empView.getDataGrid().toolBar.insertItem(0,{
name: "new",
text: mx.msg("NEW"),
toolTip: mx.msg("NEW"),
imageKey : "new",
onclick: me.controller._empView_onclick},true);
//新建 插入行
me._empView_onclick = function()
{
//selId 樹節點Id
var _ssbm = selId;
//插入行 所屬部門 賦值
me.view.empView.getDataGrid().appendItem({
"ssbm" : _ssbm
});
}
5.2.2新增匯出按鍵
me.empView.getDataGrid().onload.addEventListener(me.controller._empView_onload);
me.empDetView.getForm().entityContainer.onsaved.addEventListener(me.controller._empDetView_saved);
_dataGrid.searchBox.searchButton.onclick.clear();
_dataGrid.searchBox.searchButton.onclick.addEventListener(me.controller.searchButtom_onClick);
//新增匯出按鍵
me.empView.getDataGrid().toolBar.insertItem(10, "-", true);
me.empView.getDataGrid().toolBar.insertItem(11,{
name : "exportExcel",
text : "匯出",
toolTip : "匯出",
//imageKey : "export",
imageUrl :"~/main/resources/images/excel.gif",//圖片
onclick : me.controller. _idxinfoView_exportExcel
}, true);
//匯出表格
me._idxinfoView_exportExcel = function()
{
me.view.idxinfoView.getDataGrid().exportExcel({
tableName:" mw_app.mwt_yyjc_idx_tab",
columnNames:"IDX_NODE_CODE,IDX_NODE_NAME,DUTY_DEPT_NAME,IDX_FREQ,CALC_FORMU",
columnCaptions:"指標編碼,指標名稱,責任部門名稱,指標頻度,計算公式",
filter:"grp_id = '"+me.selId+"'",
fileName:"指標資訊"});
}
//查詢 多表匯出 欄位前不能 用表 別名
me._btnEdit_exportExcel = function()
{
me.view.empView.getDataGrid().exportExcel({
tableName:"emp,dept",
columnNames:" emp.obj_id, emp.mc, emp.sex, emp.ssbm,d.mc, emp.createtime",
columnCaptions:"編號,姓名,性別,所屬部門,時間",
filter:" emp.ssbm='"+selId+"' and emp.ssbm = dept.obj_id",
fileName:"部門員工"});
}
例子:
me._exportExcel = function()
{
me.view.getDataGrid().exportExcel({
tableName:" exam_power_consumption,exam_company",
columnNames:"exam_company.company_name,power_Month,power_Value",
columnCaptions:"公司名稱,月份,電量",
filter:"exam_power_consumption.power_company_id=exam_company.company_id",
fileName:"用電量"});
}
5.2.3新增按鍵
var btnSend = _toolBar.appendItem("cancel", "中止");
btnSend.setImageKey("moveDown");
//btnSend.setImageUrl(mx.mappath("~/todo/resources/images/draw.png"));
btnSend.on("click", btnClick);
_toolBar.appendSeparator();
5.3自定義 查詢
//引入包
$import("mx.rpc.RESTClient");
me._btnSearch_onclick = function()
{
var nodeValue = me.view.textEditor1.value;
var nodeValue2 = me.view.dropDownEditor.value;
if(nodeValue2 == null)
{
node