重构授课班时间安排模块代码
1.很多的模块除了首页index.jsp主要还有两个界面,一个添加,另一个是编辑页面,授课班时间安排也是如此。之前的做法是做了两个页面,操作方面,两者基本上都是独立的,因为感觉两个页面不好整合在一起,但是这样肯定是不好的,两者都是commit操作,应该是可以整合起来的,所以,我今天就来改改吧,记录下来,以备以后查看
界面:
add.jsp
<%@page contentType="text/html; charset=gbk"%> <%@ taglib uri="http://www.binarystar.com" prefix="BS"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>添加授课班时间安排</title> <link href="<%=request.getContextPath()%>/bsweb/css/bs.css" rel="stylesheet" type="text/css"> <link href="<%=request.getContextPath()%>/common/css/wdlab.css" rel="stylesheet" type="text/css" /> <SCRIPT language="javascript" src="<%=request.getContextPath()%>/bsjs/bs.js" type="text/javascript"></SCRIPT> <SCRIPT type="text/javascript" language="javascript" src="<%=request.getContextPath()%>/common/script/labclass.js"></SCRIPT> <SCRIPT type="text/javascript" language="javascript" src="<%=request.getContextPath()%>/bsweb/js/bsdate.js"></SCRIPT> <script type="text/javascript" src="<%=request.getContextPath()%>/common/script/wdlab.js"></script> <script type="text/javascript"> var tObj={}; tObj=thisDlg.inObj; function iniPage() { document.getElementById("label_itemName").innerHTML=tObj.itemName; document.getElementById("label_className").innerHTML=tObj.className; thisDlg.endFun(); } function AddClassTime() { var fobj={}; fobj.type="add"; if (confirm("是否提交数据?")) { doRefresh("CLASSTIME", "addClassTime", true, "", "&type="+fobj.type,"ClassTimeCommitRet"); } } function ClassTimeCommitRet(retObj, data) { if (data == "T") { var rObj={}; rObj.data=data; thisDlg.returnObj = rObj; thisDlg.closeDlg(); } else { alert(data); //thisDlg.closeDlg(); } } </script> </head> <body scroll="no" onload="iniPage();" class="body"> <form method="POST" name="frmBusiness" action=""> <table class="" style="width: 100%;" border="0" cellpadding="0" cellspacing="0"> <BS:text name="add_itemid" type="hidden" value="" /> <BS:text name="add_classid" type="hidden" value="" /> <tr class="my_tdheight" align="left"> <td> <nobr> *实验项目名称: </nobr> </td> <td style="width: 100%;"> <label id="label_itemName"></label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> *授课班名称: </nobr> </td> <td style="width: 100%;"> <label id="label_className"></label> <%--<BS:label name="label_className"></BS:label>--%> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 指导老师: </nobr> </td> <td style="width: 100%;"> <BS:label name="label_teacherName"></BS:label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 应选人数: </nobr> </td> <td style="width: 100%;"> <BS:label name="label_sumNum"></BS:label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 未选人数: </nobr> </td> <td style="width: 100%;"> <BS:label name="label_noNum"></BS:label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 参考时间: </nobr> </td> <td style="width: 100%;"> <BS:label name="kkSTime"></BS:label> —— <BS:label name="kkETime"></BS:label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 授课班开始时间: </nobr> </td> <td style="width: 100%;"> <BS:date name="classSDate" showTime="false"></BS:date> <BS:select name="classSTime" style="width:120px;"></BS:select> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 授课班结束时间: </nobr> </td> <td style="width: 100%;"> <BS:date name="classEDate" showTime="false"></BS:date> <BS:select name="classETime" style="width:120px;"></BS:select> </td> </tr> <tr style="height: 50px;" valign="bottom"> <td colspan="2" align="left"> <input type="button" value="" class="mybt_commit" onclick="AddClassTime()" /> </td> </tr> </table> </form> </body> </html>
edit.jsp
<%@page contentType="text/html; charset=gbk"%> <%@ taglib uri="http://www.binarystar.com" prefix="BS"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>编辑授课班时间安排</title> <link href="<%=request.getContextPath()%>/bsweb/css/bs.css" rel="stylesheet" type="text/css"> <link href="<%=request.getContextPath()%>/common/css/wdlab.css" rel="stylesheet" type="text/css" /> <SCRIPT type="text/javascript" language="javascript" src="<%=request.getContextPath()%>/bsjs/bs.js" type="text/javascript"></SCRIPT> <SCRIPT type="text/javascript" language="javascript" src="<%=request.getContextPath()%>/common/script/labclass.js"></SCRIPT> <SCRIPT type="text/javascript" language="javascript" src="<%=request.getContextPath()%>/bsweb/js/bsdate.js"></SCRIPT> <script type="text/javascript" language="javascript" src="<%=request.getContextPath()%>/common/script/wdlab.js"></script> <script type="text/javascript"> var tObj = {}; tObj = thisDlg.inObj; var today = new Date(); var lastDate=null; function iniPage() { document.getElementById("label_itemName").innerHTML = tObj.itemName; document.getElementById("label_className").innerHTML = tObj.className; thisDlg.endFun(); } function EditClassTimeCommit() { var fobj = {}; fobj.type = "edit"; //如果过期则不可编辑 var eDate=null; eDate = tObj.eDate; lastDate = new Date(eDate.replace(/-/g, "/")); if (Date.parse(lastDate) < Date.parse(this.today)) { alert("该时间段已过期,无法进行编辑"); thisDlg.closeDlg(); } else if (confirm("是否保存数据?")) { doRefresh("CLASSTIME", "updateClassTime", true, "", "&type=" + fobj.type, "ClassTimeCommitRet"); } } function ClassTimeCommitRet(retObj, data) { if (data == "T") { var rObj = {}; rObj.data = data; thisDlg.returnObj = rObj; thisDlg.closeDlg(); } else { alert(data); } } </script> </head> <body scroll="no" onload="iniPage();" class="body"> <form method="POST" name="frmBusiness" action=""> <BS:text name="schId" type="hidden" value="" /> <table class="" style="width: 100%;" border="0" cellpadding="0" cellspacing="0"> <tr class="my_tdheight" align="left"> <td> <nobr> *实验项目名称: </nobr> </td> <td style="width: 100%;"> <label id="label_itemName"></label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> *授课班名称: </nobr> </td> <td style="width: 100%;"> <label id="label_className"></label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 指导老师: </nobr> </td> <td style="width: 100%;"> <BS:label name="label_teacherName_edit"></BS:label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 应选人数: </nobr> </td> <td style="width: 100%;"> <BS:label name="label_sumNum_edit"></BS:label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 未选人数: </nobr> </td> <td style="width: 100%;"> <BS:label name="label_noNum_edit"></BS:label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 参考时间: </nobr> </td> <td style="width: 100%;"> <BS:label name="kkSTime"></BS:label> —— <BS:label name="kkETime"></BS:label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 授课班开始时间: </nobr> </td> <td style="width: 100%;"> <BS:date name="classSDate_edit" showTime="false"></BS:date> <BS:select name="classSTime_edit" style="width:120px;"></BS:select> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 授课班结束时间: </nobr> </td> <td style="width: 100%;"> <BS:date name="classEDate_edit" showTime="false"></BS:date> <BS:select name="classETime_edit" style="width:120px;"></BS:select> </td> </tr> <tr style="height: 50px;" valign="bottom"> <td colspan="2" align="left"> <input type="button" value="" class="mybt_commit" onclick="EditClassTimeCommit()" /> </td> </tr> </table> </form> </body> </html> 除了js部分是不同的,因为处理的业务是不同,其他的页面显示的内容基本上是相同的,只是某些控件设置的值不一样而已,一下是初始化页面的方法
/** * <p> * 方法名称: do_AddClassTimeIni * </p> * <p> * 方法功能描述: 添加授课班时间安排前初始化页面 * </p> * <p> * 输入参数描述: BSObject m_bs:BinaryStar框架参数集。 * </p> * <p> * 输出参数描述: BSObject:BinaryStar框架参数集。 * </p> */ public BSObject do_AddClassTimeIni(BSObject m_bs) throws Exception { m_bs.setCurPage("kkmang/classtime/add.jsp"); String itemId = (String) m_bs.getPrivateMap().get("itemId"); String classId = (String) m_bs.getPrivateMap().get("classId"); int stusum = 0, choseNum = 0; ClassPojo oneClass = null; SqlExecute sqlHelper = new SqlExecute(); try { BSClassTimeDBMang ctDB = new BSClassTimeDBMang(sqlHelper, m_bs); stusum = ctDB.getClassStuSum(classId);// 查到授课班信息和人数信息 choseNum = ctDB.getClassChoose(classId, itemId); oneClass = ctDB.getClassInfo(classId); } catch (Exception e) { e.printStackTrace(); throw e; } finally{ sqlHelper.close(); } if (oneClass != null) { m_bs.setPrivateValue("label_teacherName", oneClass .getClassTeacher().getName()); } else { m_bs.setPrivateValue("label_teacherName", "未知"); } m_bs.setPrivateValue("add_itemid", itemId); m_bs.setPrivateValue("add_classid", classId); m_bs.setPrivateValue("label_sumNum", String.valueOf(stusum));// 第二个一定要是string才行 m_bs.setPrivateValue("label_noNum", String.valueOf(stusum - choseNum)); //设置开始日期是今天 Calendar thisDate = Calendar.getInstance();//这里是得到今天 m_bs.setPrivateValue("classSDate", sdf.format(thisDate.getTime())); //设置结束日期是今天的一周之后 thisDate.add(Calendar.DATE, 7);//今天的七天之后 m_bs.setPrivateValue("classEDate", sdf.format(thisDate.getTime())); m_bs.setPrivateValue("kkSTime", WDLabStatic.term.getLabClassStart() .substring(0, 10)); m_bs.setPrivateValue("kkETime", WDLabStatic.term.getLabClassEnd() .substring(0, 10)); // 得到时间段 ArrayList<TimeSetPojo> timeSetList = WDLabStatic.timeSetList; TimeSetPojo onePojo = null; // 设置时间段到下拉框 VBSSelect classSTime = (VBSSelect) m_bs.getTagMap().get("classSTime"); VBSSelect classETime = (VBSSelect) m_bs.getTagMap().get("classETime"); if (classSTime == null || classETime == null) { classSTime = new VBSSelect("classSTime"); classETime = new VBSSelect("classETime"); classSTime.setStyle("width:100px;"); classETime.setStyle("width:100px;"); for (int i = 0, size = timeSetList.size(); i < size; i++) {// 设置实验系统的时间段到下拉框中 onePojo = timeSetList.get(i); classSTime.setOption(String.valueOf(i), onePojo.getTimeFormated(), 0); classETime.setOption(String.valueOf(i), onePojo.getTimeFormated(), 0); } m_bs.setTagValue(classSTime); m_bs.setTagValue(classETime); } m_bs.setPrivateValue("classSTime", "0"); m_bs.setPrivateValue("classETime", "4"); return m_bs; } /** * <p> * 方法名称: do_EditClassTimeIni * </p> * <p> * 方法功能描述: 编辑授课班时间安排前初始化页面 * </p> * <p> * 输入参数描述: BSObject m_bs:BinaryStar框架参数集。 * </p> * <p> * 输出参数描述: BSObject:BinaryStar框架参数集。 * </p> */ public BSObject do_EditClassTimeIni(BSObject m_bs) throws Exception { m_bs.setCurPage("kkmang/classtime/edit.jsp"); String schId = (String) m_bs.getPrivateMap().get("schId"); int stusum = 0, choseNum = 0; ClassPojo oneClass = null; ClassTimePojo classTimePojo = null; SqlExecute sqlHelper = new SqlExecute(); try { BSClassTimeDBMang ctDB = new BSClassTimeDBMang(sqlHelper, m_bs); classTimePojo = ctDB.getScheduleInfo(schId);// 查询到当前点击的授课班时间安排的信息 stusum = ctDB.getClassStuSum(classTimePojo.getOneClass() .getClassId()); choseNum = ctDB.getClassChoose(classTimePojo.getOneClass() .getClassId(), classTimePojo.getOneItem().getItemId()); oneClass = ctDB.getClassInfo(classTimePojo.getOneClass() .getClassId()); } catch (Exception e) { e.printStackTrace(); throw e; } finally{ sqlHelper.close(); } if (oneClass != null) { m_bs.setPrivateValue("label_teacherName_edit", oneClass .getClassTeacher().getName()); } else { m_bs.setPrivateValue("label_teacherName_edit", "未知"); } m_bs.setPrivateValue("schId", schId); m_bs.setPrivateValue("label_sumNum_edit", String.valueOf(stusum)); m_bs.setPrivateValue("label_noNum_edit", String.valueOf(stusum - choseNum)); m_bs.setPrivateValue("kkSTime", WDLabStatic.term.getLabClassStart() .substring(0, 10)); m_bs.setPrivateValue("kkETime", WDLabStatic.term.getLabClassEnd() .substring(0, 10)); m_bs.setPrivateValue("classSDate_edit", classTimePojo.getsDate().substring(0, 10)); m_bs.setPrivateValue("classEDate_edit", classTimePojo.geteDate().substring(0, 10)); // 得到时间段 ArrayList<TimeSetPojo> timeSetList = WDLabStatic.timeSetList; TimeSetPojo onePojo = null; // 设置时间段到下拉框 VBSSelect classSTime_edit = (VBSSelect) m_bs.getTagMap().get( "classSTime_edit"); VBSSelect classETime_edit = (VBSSelect) m_bs.getTagMap().get( "classETime_edit"); if (classSTime_edit == null || classETime_edit == null) {// 设置实验系统的时间段到下拉框中 classSTime_edit = new VBSSelect("classSTime_edit"); classETime_edit = new VBSSelect("classETime_edit"); for (int i = 0, size = timeSetList.size(); i < size; i++) { onePojo = timeSetList.get(i); classSTime_edit.setOption(String.valueOf(i), onePojo.getTimeFormated(), 0); classETime_edit.setOption(String.valueOf(i), onePojo.getTimeFormated(), 0); } m_bs.setTagValue(classSTime_edit); m_bs.setTagValue(classETime_edit); } // 设置当前授课班时间安排的时间 m_bs.setPrivateValue("classSTime_edit", classTimePojo.getsTime().substring(4)); m_bs.setPrivateValue("classETime_edit", classTimePojo.geteTime().substring(4)); return m_bs; }
至于添加和更新的方法,也是有很多相同的内容
/** * <p> * 方法名称: do_addClassTime * </p> * <p> * 方法功能描述: 添加授课班时间安排 * </p> * <p> * 输入参数描述: BSObject m_bs:BinaryStar框架参数集。 * </p> * <p> * 输出参数描述: BSObject:BinaryStar框架参数集。 * </p> */ public BSObject do_addClassTime(BSObject m_bs) throws Exception { String retStr = "操作失败,请稍后再试"; int count = 0; ClassTimePojo oneClassTime = new ClassTimePojo(); oneClassTime.getOneItem().setItemId((String) m_bs.getPrivateMap().get("add_itemid")); oneClassTime.getOneClass().setClassId((String) m_bs.getPrivateMap().get("add_classid")); oneClassTime.setsDate((String) m_bs.getPrivateMap().get("classSDate")); oneClassTime.seteDate((String) m_bs.getPrivateMap().get("classEDate")); oneClassTime.setsTime("csu_" + (String) m_bs.getPrivateMap().get("classSTime")); oneClassTime.seteTime("csu_" + (String) m_bs.getPrivateMap().get("classETime"));// 通过前台得到并设置一个授课班时间安排 SqlExecute sqlHelper = new SqlExecute(); ArrayList<ClassTimePojo> list = new ArrayList<ClassTimePojo>(); try { sqlHelper.setAutoCommit(false); BSClassTimeDBMang ctDB = new BSClassTimeDBMang(sqlHelper, m_bs); list = ctDB.getLabClassTimeList(((VBSSelect) m_bs.getTagMap() .get("LabClass_LabList")).getCurSelectValue());// 得到实验室的所有授课班时间安排 retStr = _validateClassTime(oneClassTime, list, ""); if (retStr.equals("OK")) {// 只有可以插入时才进行插入操作 count = ctDB.intsertClassTime(oneClassTime); if (count > 0) { retStr = "T"; } else { retStr = "没有更新任何数据!"; } } sqlHelper.commit(); } catch (Exception e) { sqlHelper.rollback(); e.printStackTrace(); throw e; } m_bs.setRetrunObj(retStr); return m_bs; } /** * <p> * 方法名称: do_updateClassTime * </p> * <p> * 方法功能描述: 更新授课班时间安排 * </p> * <p> * 输入参数描述: BSObject m_bs:BinaryStar框架参数集。 * </p> * <p> * 输出参数描述: BSObject:BinaryStar框架参数集。 * </p> */ public BSObject do_updateClassTime(BSObject m_bs) throws Exception { VBSSelect LabClass_LabList = (VBSSelect) m_bs.getTagMap().get( "LabClass_LabList"); String labId = LabClass_LabList.getCurSelectValue(); m_bs.setCurPage("kkmang/classtime/edit.jsp"); String retStr = "操作失败,请稍后再试"; int count = 0; String schId = (String) m_bs.getPrivateMap().get("schId"); ClassTimePojo oneClassTime = new ClassTimePojo(); oneClassTime.setId(schId); oneClassTime.setsDate((String) m_bs.getPrivateMap() .get("classSDate_edit")); oneClassTime.seteDate((String) m_bs.getPrivateMap() .get("classEDate_edit")); oneClassTime.setsTime("csu_" + (String) m_bs.getPrivateMap().get("classSTime_edit")); oneClassTime.seteTime("csu_" + (String) m_bs.getPrivateMap().get("classETime_edit")); SqlExecute sqlHelper = new SqlExecute(); try { sqlHelper.setAutoCommit(false); BSClassTimeDBMang ctDB = new BSClassTimeDBMang(sqlHelper, m_bs); ArrayList<ClassTimePojo> list = ctDB.getLabClassTimeList(labId);// 得到实验室的所有授课班时间安排 retStr = _validateClassTime(oneClassTime, list, schId); if (retStr.equals("OK")) {// 只有可以更新时才进行更新操作 count = ctDB.updateClassTime(oneClassTime); if (count > 0) { retStr = "T"; ClassTimePojo beforePojo = ctDB.getScheduleInfo(schId);// 得到修改前的信息 int result = this._delLabClassByClassTime(beforePojo, oneClassTime, labId, ctDB); } else { retStr = "没有更新任何数据!"; } } sqlHelper.commit(); } catch (Exception e) { sqlHelper.rollback(); e.printStackTrace(); throw e; } m_bs.setRetrunObj(retStr); return m_bs; }
之前的处理流程是这样子的:
add:添加按钮关联了一个按键事件 写在labclass.js中
this.addClassTime = function(i, j) { var oneItem = this.itList[i]; var item_id = "item_" + oneItem.itemId; var btList = eval(this.name + ".classMap." + item_id); var oneClass = btList[j]; var fromObj = {}; fromObj.type="add"; fromObj.className = oneClass.className; fromObj.itemName = oneItem.itemName; fromObj.itemId = oneItem.itemId; fromObj.classId = oneClass.classId; var p = getParent(); p.openParentDlg("ADDCLASSTIME", "授课班时间安排", 380, 360, fromObj, "CLASSTIME", "AddClassTimeIni", "&type="+fromObj.type+"&itemId=" + oneItem.itemId + "&classId=" + oneClass.classId, window, true, true, "ClassTimeRet", ""); };
edit:
this._onClick = function(oneLc) { event.cancelBubble = true; if (oneLc != null) { var fromObj = {}; fromObj.type="edit"; fromObj.eDate=oneLc.eDate; fromObj.className = oneLc.oneClass.className; fromObj.itemName = oneLc.oneItem.itemName; fromObj.schId = oneLc.id; var p = getParent(); p.openParentDlg("EDITCLASSTIME", "编辑授课班时间安排", 380, 360, fromObj, "CLASSTIME", "EditClassTimeIni", "&type="+fromObj.type+"&schId=" + fromObj.schId, window, true, true, "ClassTimeRet", ""); } };这个方法给下一个页面 add.jsp/edit.jsp 传递了一个对象fromObj,里面存放了一个很重要的属性type,它是用来区别编辑操作的!
还要注意的就是回调函数 ClassTimeRet 写在 index.jsp 中
这个回调函数是当新打开的窗体关闭了时触发的,这里就是当返回的值是“T”时,就重新刷新页面
function ClassTimeRet(p_RetData, p_InData) { if (p_RetData.data == "T") { doRefresh("CLASSTIME", "getLabClassDate", true, "", "", ""); } }
同时还有一个回调函数,当点击了新的页面(添加或者编辑)就会触发的方法
添加的:
function AddClassTime() { var fobj={}; fobj.type="add"; if (confirm("是否提交数据?")) { doRefresh("CLASSTIME", "addClassTime", true, "","&type="+fobj.type,"ClassTimeCommitRet",""); } }
编辑的:
function EditClassTimeCommit() { var fobj = {}; fobj.type = "edit"; //如果过期则不可编辑 var eDate=null; eDate = tObj.eDate; lastDate = new Date(eDate.replace(/-/g, "/")); if (Date.parse(lastDate) < Date.parse(this.today)) { alert("该时间段已过期,无法进行编辑"); thisDlg.closeDlg(); } else if (confirm("是否保存数据?")) { doRefresh("CLASSTIME", "updateClassTime", true, "", "&type=" + fobj.type, "ClassTimeCommitRet"); } }
他们调用同一个回调函数
function ClassTimeCommitRet(retObj, data) { if (data == "T") { var rObj = {}; rObj.data = data; thisDlg.returnObj = rObj; thisDlg.closeDlg(); } else { alert(data); } } 当返回的值是“T” 时,就构造一个新的对象rObj并作为这个窗体的返回值返回给上一个窗体(也就是index.jsp),之后就关闭当前的窗体
重构的步骤:
第一步:整合add.jsp和edit.jsp,新建一个jsp:commit.jsp,界面基本上借用add.jsp,但是要整合edit.jsp中其他的内容,包括js方法以及不同的隐藏域,同时修改提交按钮触发的js方法
commit.jsp
<%@page contentType="text/html; charset=gbk"%> <%@ taglib uri="http://www.binarystar.com" prefix="BS"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>添加授课班时间安排</title> <link href="<%=request.getContextPath()%>/bsweb/css/bs.css" rel="stylesheet" type="text/css"> <link href="<%=request.getContextPath()%>/common/css/wdlab.css" rel="stylesheet" type="text/css" /> <SCRIPT language="javascript" src="<%=request.getContextPath()%>/bsjs/bs.js" type="text/javascript"></SCRIPT> <SCRIPT type="text/javascript" language="javascript" src="<%=request.getContextPath()%>/common/script/labclass.js"></SCRIPT> <SCRIPT type="text/javascript" language="javascript" src="<%=request.getContextPath()%>/bsweb/js/bsdate.js"></SCRIPT> <script type="text/javascript" src="<%=request.getContextPath()%>/common/script/wdlab.js"></script> <script type="text/javascript"> var tObj={}; var lastDate=null; tObj=thisDlg.inObj; var today = new Date(); function iniPage() { document.getElementById("label_itemName").innerHTML=tObj.itemName; document.getElementById("label_className").innerHTML=tObj.className; thisDlg.endFun(); } function CommitClassTime(){ var fObj={}; fObj.type=tObj.type; if(fObj.type=="add"){ if (confirm("是否提交数据?")) { doRefresh("CLASSTIME", "addClassTime", true, "","&type="+fObj.type,"ClassTimeCommitRet",""); } }else if(fObj.type == "edit"){ var eDate=null; eDate = tObj.eDate; lastDate = new Date(eDate.replace(/-/g, "/")); if (Date.parse(lastDate) < Date.parse(this.today)) { alert("该时间段已过期,无法进行编辑"); thisDlg.closeDlg(); } else if (confirm("是否保存数据?")) { doRefresh("CLASSTIME", "updateClassTime", true, "", "&type=" + fObj.type, "ClassTimeCommitRet"); } } } function ClassTimeCommitRet(retObj, data) { if (data!=null && data == "T") { var rObj={}; rObj.data=data; thisDlg.returnObj = rObj; thisDlg.closeDlg(); } else { alert(data); //thisDlg.closeDlg(); } } </script> </head> <body scroll="no" onload="iniPage();" class="body"> <form method="POST" name="frmBusiness" action=""> <BS:text name="add_itemid" type="hidden" value="" /> <BS:text name="add_classid" type="hidden" value="" /> <BS:text name="schId" type="hidden" value="" /> <table class="" style="width: 100%;" border="0" cellpadding="0" cellspacing="0"> <tr class="my_tdheight" align="left"> <td> <nobr> 实验项目名称: </nobr> </td> <td style="width: 100%;"> <label id="label_itemName"></label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 授课班名称: </nobr> </td> <td style="width: 100%;"> <label id="label_className"></label> <%--<BS:label name="label_className"></BS:label>--%> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 指导老师: </nobr> </td> <td style="width: 100%;"> <BS:label name="label_teacherName"></BS:label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 应选人数: </nobr> </td> <td style="width: 100%;"> <BS:label name="label_sumNum"></BS:label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 未选人数: </nobr> </td> <td style="width: 100%;"> <BS:label name="label_noNum"></BS:label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 参考时间: </nobr> </td> <td style="width: 100%;"> <BS:label name="kkSTime"></BS:label> ~ <BS:label name="kkETime"></BS:label> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 授课班开始时间: </nobr> </td> <td style="width: 100%;"> <BS:date name="classSDate" showTime="false"></BS:date> <BS:select name="classSTime" style="width:120px;"></BS:select> </td> </tr> <tr class="my_tdheight" align="left"> <td> <nobr> 授课班结束时间: </nobr> </td> <td style="width: 100%;"> <BS:date name="classEDate" showTime="false"></BS:date> <BS:select name="classETime" style="width:120px;"></BS:select> </td> </tr> <tr style="height: 50px;" valign="bottom"> <td colspan="2" align="left"> <input type="button" value="" class="mybt_commit" onclick="CommitClassTime()" /> </td> </tr> </table> </form> </body> </html>
第二步:整合页面初始化操作,利用labclass.js方法传过来的对象的type属性,就可以区别哪些时候是添加要做的,哪些时候是编辑要做的
/** * <p> * 方法名称: do_CommitClassTimeIni * </p> * <p> * 方法功能描述: 编辑授课班时间安排前初始化页面 * </p> * <p> * 输入参数描述: BSObject m_bs:BinaryStar框架参数集。 * </p> * <p> * 输出参数描述: BSObject:BinaryStar框架参数集。 * </p> */ public BSObject do_CommitClassTimeIni(BSObject m_bs) throws Exception { String type = (String) m_bs.getPrivateMap().get("type"); String itemId = ""; String classId = ""; String schId=""; int stusum = 0, choseNum = 0; ClassPojo oneClass = null; ClassTimePojo classTimePojo = null; if (type.equals("add")) { m_bs.setCurPage("kkmang/classtime/commit.jsp"); itemId = (String) m_bs.getPrivateMap().get("itemId"); classId = (String) m_bs.getPrivateMap().get("classId"); m_bs.setPrivateValue("add_itemid", itemId); m_bs.setPrivateValue("add_classid", classId); } else { m_bs.setCurPage("kkmang/classtime/commit.jsp"); schId=(String) m_bs.getPrivateMap().get("schId"); m_bs.setPrivateValue("schId", schId); } SqlExecute sqlHelper = new SqlExecute(); try { BSClassTimeDBMang ctDB = new BSClassTimeDBMang(sqlHelper, m_bs); if (type.equals("edit")) { classTimePojo = ctDB.getScheduleInfo(schId);// 查询到当前点击的授课班时间安排的信息 classId = classTimePojo.getOneClass().getClassId(); itemId = classTimePojo.getOneItem().getItemId(); } stusum = ctDB.getClassStuSum(classId);// 查到授课班信息和人数信息 choseNum = ctDB.getClassChoose(classId, itemId); oneClass = ctDB.getClassInfo(classId); } catch (Exception e) { e.printStackTrace(); throw e; } finally { sqlHelper.close(); } //设置指导老师姓名 if (oneClass != null) { m_bs.setPrivateValue("label_teacherName", oneClass .getClassTeacher().getName()); } else { m_bs.setPrivateValue("label_teacherName", "未知"); } //设置人数 m_bs.setPrivateValue("label_sumNum", String.valueOf(stusum)); m_bs.setPrivateValue("label_noNum", String.valueOf(stusum - choseNum)); //设置参考时间 m_bs.setPrivateValue("kkSTime", WDLabStatic.term.getLabClassStart() .substring(0, 10)); m_bs.setPrivateValue("kkETime", WDLabStatic.term.getLabClassEnd() .substring(0, 10)); // 得到时间段 ArrayList<TimeSetPojo> timeSetList = WDLabStatic.timeSetList; TimeSetPojo onePojo = null; // 设置时间段到下拉框 VBSSelect classSTime = (VBSSelect) m_bs.getTagMap().get("classSTime"); VBSSelect classETime = (VBSSelect) m_bs.getTagMap().get("classETime"); if (classSTime == null || classETime == null) { classSTime = new VBSSelect("classSTime"); classETime = new VBSSelect("classETime"); classSTime.setStyle("width:100px;"); classETime.setStyle("width:100px;"); for (int i = 0, size = timeSetList.size(); i < size; i++) {// 设置实验系统的时间段到下拉框中 onePojo = timeSetList.get(i); classSTime.setOption(String.valueOf(i), onePojo.getTimeFormated(), 0); classETime.setOption(String.valueOf(i), onePojo.getTimeFormated(), 0); } m_bs.setTagValue(classSTime); m_bs.setTagValue(classETime); } if(type.equals("edit")){ //设置开始和结束日期 m_bs.setPrivateValue("classSDate", classTimePojo.getsDate() .substring(0, 10)); m_bs.setPrivateValue("classEDate", classTimePojo.geteDate() .substring(0, 10)); // 设置当前授课班时间安排的时间 m_bs.setPrivateValue("classSTime", classTimePojo.getsTime() .substring(4)); m_bs.setPrivateValue("classETime", classTimePojo.geteTime() .substring(4)); }else{ //设置开始日期是今天 Calendar thisDate = Calendar.getInstance();//这里是得到今天 m_bs.setPrivateValue("classSDate", sdf.format(thisDate.getTime())); //设置结束日期是今天的一周之后 thisDate.add(Calendar.DATE, 7);//今天的七天之后 m_bs.setPrivateValue("classEDate", sdf.format(thisDate.getTime())); //设置时间是第一天的第一节到一周后的那天的晚上第一节 m_bs.setPrivateValue("classSTime", "0"); m_bs.setPrivateValue("classETime", "4"); } return m_bs; }
可以看到的就是在三个不同的地方都是使用了判断type是add还是edit,不能和在一起是因为操作是有一定的顺序的
第三步:修改 labclass.js
this._onClick = function(oneLc) { event.cancelBubble = true; if (oneLc != null) { var fromObj = {}; fromObj.type="edit"; fromObj.eDate=oneLc.eDate; fromObj.className = oneLc.oneClass.className; fromObj.itemName = oneLc.oneItem.itemName; fromObj.schId = oneLc.id; var p = getParent(); p.openParentDlg("EDITCLASSTIME", "编辑授课班时间安排", 380, 360, fromObj, "CLASSTIME", "CommitClassTimeIni", "&type="+fromObj.type+"&schId=" + fromObj.schId, window, true, true, "ClassTimeRet", ""); } };
修改调用的后台方法就可以了
第四步:整合处理方法addClassTime和editClassTime,根据的也是前台传过来的type属性值
/** * <p> * 方法名称: do_commitClassTime * </p> * <p> * 方法功能描述: 更新授课班时间安排 * </p> * <p> * 输入参数描述: BSObject m_bs:BinaryStar框架参数集。 * </p> * <p> * 输出参数描述: BSObject:BinaryStar框架参数集。 * </p> */ public BSObject do_commitClassTime(BSObject m_bs) throws Exception { int count = 0; String retStr = "操作失败,请稍后再试"; //得到操作的类别,授课班时间安排id和实验室id String type = (String)m_bs.getPrivateMap().get("type"); String schId = (String) m_bs.getPrivateMap().get("schId"); String labId = ((VBSSelect) m_bs.getTagMap().get("LabClass_LabList")).getCurSelectValue(); // 通过前台得到并设置一个授课班时间安排 ClassTimePojo oneClassTime = new ClassTimePojo(); if(type.equals("edit")){ oneClassTime.setId(schId); }else if(type.equals("add")){ oneClassTime.getOneItem().setItemId( (String) m_bs.getPrivateMap().get("add_itemid")); oneClassTime.getOneClass().setClassId( (String) m_bs.getPrivateMap().get("add_classid")); } oneClassTime.setsDate((String) m_bs.getPrivateMap().get("classSDate")); oneClassTime.seteDate((String) m_bs.getPrivateMap().get("classEDate")); oneClassTime.setsTime("csu_" + (String) m_bs.getPrivateMap().get("classSTime")); oneClassTime.seteTime("csu_" + (String) m_bs.getPrivateMap().get("classETime")); SqlExecute sqlHelper = new SqlExecute(); ArrayList<ClassTimePojo> list = null; try { sqlHelper.setAutoCommit(false); BSClassTimeDBMang ctDB = new BSClassTimeDBMang(sqlHelper, m_bs); list = ctDB.getLabClassTimeList(labId);// 得到实验室的所有授课班时间安排 if (type.equals("add")) { retStr = _validateClassTime(oneClassTime, list, ""); if (retStr.equals("OK")) {// 只有可以插入时才进行插入操作 count = ctDB.intsertClassTime(oneClassTime); if (count > 0) { retStr = "T"; } else { retStr = "没有更新任何数据!"; } } } else { retStr = _validateClassTime(oneClassTime, list, schId); if (retStr.equals("OK")) {// 只有可以更新时才进行更新操作 count = ctDB.updateClassTime(oneClassTime); if (count > 0) { retStr = "T"; ClassTimePojo beforePojo = ctDB.getScheduleInfo(schId);// 得到修改前的信息 this._delLabClassByClassTime(beforePojo, oneClassTime, labId, ctDB); } else { retStr = "没有更新任何数据!"; } } } sqlHelper.commit(); } catch (Exception e) { sqlHelper.rollback(); e.printStackTrace(); throw e; } m_bs.setRetrunObj(retStr); return m_bs; }至此,我重新测试了一遍,功能和以前一样,但是代码明显少了很多啊,呵呵呵,重构!