要求
【新增】【删除】【保存】
选择 | 序号 | 薪资项目 | 字段名 |
□ | 1 | 职务工资 | XZ1 |
□ | 2 | 级别工资 | XZ2 |
□ | 3 | 技术等级工资 | XZ3 |
控制
序号自动生成,不可修改,满足唯一即可,保存前必须验证薪资项目和字段名都填了数据。
【新增】列表增加一行。
【删除】删除选中的薪资项,删除前提示“是否确定删除薪资项?”,删除完成后提示删除成功。
【保存】每一项都必填,否则不允许保存,保存当前页面的数据到数据库中。
最后结果效果图
代码
<%@ page language="java"import="java.util.*"pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <basehref="<%=basePath%>">
<title>My JSP 'xzwh.jsp' starting page</title>
<metahttp-equiv="pragma"content="no-cache"> <metahttp-equiv="cache-control"content="no-cache"> <metahttp-equiv="expires"content="0"> <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"> <metahttp-equiv="description"content="This is my page"> <%@include file="/frame/common/ext-js3.jsp"%> <styletype="text/css"> .add { background-image:url(<%=basePath%>/resources/images/add.png) !important; } .remove { background-image:url(<%=basePath%>/resources/images/delete.gif) !important; } .save { background-image:url(<%=basePath%>/resources/images/save.gif) !important; } </style> <scripttype="text/javascript"src="<%=basePath%>ext/extjs3/ux/CheckColumn.js"></script> <scripttype="text/javascript"> varstop=0; varedit; Ext.onReady(function(){ varfm = Ext.form; var sm = newExt.grid.CheckboxSelectionModel({ //创建checkbox列 //同时给前面每条数据的checkbox添加一个监听,只有选中一个以上的,删除按钮才会相应 listeners: { selectionchange:function(sm) { if (sm.getCount()) { grid.removeButton.enable(); } else { grid.removeButton.disable(); } } } });
//创建解析数据源的reader格式,是arrayReader(和表头对于的name的dataIndex,和数据类型) varreader = newExt.data.ArrayReader({}, [ {name: 'xuanze',type:'bool'}, {name: 'xuhao',type:'float'}, {name: 'xinzixiangmu', type: 'string'}, {name: 'ziduanming', type: 'string'} ]); //创建grid列字段的表头,以及对应的dataIndex和排序,还有该列是否可编辑,是否为空,长度等,顺便把checkbox列加进来 varcm = newExt.grid.ColumnModel({ // specify any defaults for each column defaults: { sortable:true // columns are not sortable by default }, columns: [ sm, {header:"序号", width: 100, sortable:true, dataIndex:'xuhao',align:'center'}, {header:"薪资项目", width: 250, sortable:true, dataIndex:'xinzixiangmu',align:'center',editor:new fm.TextField({allowBlank:false,maxLength:20})}, {header:"字段名", width: 200, sortable:true, dataIndex:'ziduanming',align:'center',editor:new fm.TextField({allowBlank:false,maxLength:20})} ] });
// create the Data Store 创建数据源,并把前面创建的reader加进来 var store = newExt.data.Store({ reader:reader });
// create the editor grid创建最后的grid,把数据源,列,checkbox,加进来 var grid = newExt.grid.EditorGridPanel({ store: store, cm: cm, sm:sm, renderTo:'editor-grid', width: 600, height: 780, title:'薪资项对应关系维护', frame:true, iconCls:'icon-grid', clicksToEdit: 1, tbar: [{ text:'新增', iconCls:'add', handler :function(){ // access the Record constructor through the grid's store var Plant = grid.getStore().recordType; var storeObj=grid.getStore(); var p; if(grid.getStore().getCount()!=0){ function getMaxXuhao(){ var firstXuhao=parseInt(storeObj.getAt(0).get('xuhao')); var lastXuhao=parseInt(storeObj.getAt(storeObj.getCount()-1).get('xuhao')); if (firstXuhao>=lastXuhao){ return firstXuhao+1; }else{ return lastXuhao+1; } }
p = new Plant({ //设置新增一列的类型 xuanze: false, xuhao:getMaxXuhao()//应该获取序列的最大值+1 }); }else{ p = new Plant({ xuanze: false, xuhao:1 //此序号得程序自动生成,为主键,不重复 });
}
grid.stopEditing(); store.insert(0, p); //插入到第一行 grid.startEditing(0, 2); //是第一行的第二列可编辑 } },'-', { text:'删除', iconCls:'remove', ref:'../removeButton', disabled:true, handler :function(){ vars = grid.getSelectionModel().getSelections(); Ext.MessageBox.confirm('确认框','是否确定删除薪资项?',function(){ afterDelete(s,store,sm); }); } },'-', { text:'保存', iconCls:'save', handler :function(){ varjsonArray=[]; store.each(function(record){ if(Ext.util.Format.trim(record.get("xinzixiangmu"))!='undefined'&&Ext.util.Format.trim(record.get("xinzixiangmu"))!=''&&Ext.util.Format.trim(record.get("ziduanming"))!='undefined'&&Ext.util.Format.trim(record.get("ziduanming"))!=''){ jsonArray.push(record.data); }else{ stop=1; return false; }
}); if(stop==1){ //某行的薪资项目或者字段名为空 Ext.Msg.alert('','薪资项目或字段名称不能为空',function(){ });
return false; } varresultJson=Ext.util.JSON.encode(jsonArray); Ext.Ajax.request({ url: '<%=basePath%>webapp/gztgl/xzwh/GztglServlet',//动态页地址 params: {data:resultJson,status:'save'},//键值对形式 success:function(response){ if(response.responseText){ Ext.Msg.alert('','保存成功',function(){ showResult(store,sm); }); }else{ Ext.Msg.alert('','保存失败'); } } }); }
}] }); 查询ajax showResult(store,sm);
});
functionafterDelete(s,store,sm){ varxuhaoStr=""; for(vari = 0, r; r = s[i]; i++){//拼接选中数据的主键去数据库中删除 xuhaoStr=xuhaoStr+r.data.xuhao+","; } xuhaoStr = xuhaoStr.substring(0, xuhaoStr.lastIndexOf(',')); Ext.Ajax.request({ url: '<%=basePath%>webapp/gztgl/xzwh/GztglServlet',//动态页地址 params: {xuhaostr:xuhaoStr,status:'delete'},//键值对形式 success:function(response){ if(response.responseText){ //请求删除成功 Ext.Msg.alert('','删除成功',function(){ showResult(store,sm); }); }else{ //请求删除失败 Ext.Msg.alert('','删除失败',function(){ showResult(store,sm); });
}
} });
}
functionshowResult(store,sm){ //刚进页面调用查询 //保存成功后,调用查询 Ext.Ajax.request({ url:'<%=basePath%>webapp/gztgl/xzwh/GztglServlet',//动态页地址 params: {status:'query'},//键值对形式 success: function(response){ var result=eval('(' + response.responseText +')'); var storeArray=[]; for (vari=0;i<result.length;i++){ var array=[]; array.push(sm); array.push(result[i].xh); array.push(result[i].zw); array.push(result[i].zd); storeArray.push(array); } // var sss=[[sm,99,"基本离退休费","XZ1"],[sm,100,"生活补贴","XZ2"],[sm,98,"交通费","XZ3"]]; store.loadData(storeArray);//加载数据 } }); } </script> </head> <body> <h1></h1> <divid="editor-grid"></div> </body> </html>
|