zoukankan      html  css  js  c++  java
  • 重构授课班时间安排模块代码

    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=" 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>
                                &nbsp;*实验项目名称:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <label id="label_itemName"></label>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;*授课班名称:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <label id="label_className"></label>
                            <%--<BS:label name="label_className"></BS:label>--%>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;指导老师:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:label name="label_teacherName"></BS:label>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;应选人数:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:label name="label_sumNum"></BS:label>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;未选人数:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:label name="label_noNum"></BS:label>
                        </td>
                    </tr>
    
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;参考时间:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:label name="kkSTime"></BS:label>
                            ——
                            <BS:label name="kkETime"></BS:label>
                        </td>
                    </tr>
    
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;授课班开始时间:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:date name="classSDate" showTime="false"></BS:date>
                            <BS:select name="classSTime" style="120px;"></BS:select>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;授课班结束时间:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:date name="classEDate" showTime="false"></BS:date>
                            <BS:select name="classETime" style="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=" 100%;" border="0" cellpadding="0"
                    cellspacing="0">
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;*实验项目名称:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <label id="label_itemName"></label>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;*授课班名称:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <label id="label_className"></label>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;指导老师:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:label name="label_teacherName_edit"></BS:label>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;应选人数:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:label name="label_sumNum_edit"></BS:label>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;未选人数:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:label name="label_noNum_edit"></BS:label>
                        </td>
                    </tr>
    
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;参考时间:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:label name="kkSTime"></BS:label>
                            ——
                            <BS:label name="kkETime"></BS:label>
                        </td>
                    </tr>
    
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;授课班开始时间:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:date name="classSDate_edit" showTime="false"></BS:date>
                            <BS:select name="classSTime_edit" style="120px;"></BS:select>
                        </td>
                    </tr>
    
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;授课班结束时间:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:date name="classEDate_edit" showTime="false"></BS:date>
                            <BS:select name="classETime_edit" style="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("100px;");
                classETime.setStyle("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=" 100%;" border="0" cellpadding="0"
                    cellspacing="0">
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;实验项目名称:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <label id="label_itemName"></label>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;授课班名称:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <label id="label_className"></label>
                            <%--<BS:label name="label_className"></BS:label>--%>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;指导老师:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:label name="label_teacherName"></BS:label>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;应选人数:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:label name="label_sumNum"></BS:label>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;未选人数:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:label name="label_noNum"></BS:label>
                        </td>
                    </tr>
    
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;参考时间:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:label name="kkSTime"></BS:label>
                            ~
                            <BS:label name="kkETime"></BS:label>
                        </td>
                    </tr>
    
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;授课班开始时间:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:date name="classSDate" showTime="false"></BS:date>
                            <BS:select name="classSTime" style="120px;"></BS:select>
                        </td>
                    </tr>
                    <tr class="my_tdheight" align="left">
                        <td>
                            <nobr>
                                &nbsp;授课班结束时间:
                            </nobr>
                        </td>
                        <td style=" 100%;">
                            <BS:date name="classEDate" showTime="false"></BS:date>
                            <BS:select name="classETime" style="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("100px;");
                classETime.setStyle("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;
        }
    
    
    至此,我重新测试了一遍,功能和以前一样,但是代码明显少了很多啊,呵呵呵,重构!
     
  • 相关阅读:
    java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind
    Spring读书笔记Spring核心机制:依赖注入
    Java邮件开发JavaMail(二)
    Spring 读书笔记Spring容器(一)
    Spring读书笔记部署我的第一个Spring项目 .
    解决org.hibernate.QueryException illegal attempt to dereference collection 异常错误
    我的求职历程求职总结
    Java邮件开发JavaMail(三)
    silverlight在firefox上经常崩溃
    silverlight的开发暂时是痛苦的
  • 原文地址:https://www.cnblogs.com/yinger/p/2122659.html
Copyright © 2011-2022 走看看