實現複製表單功能(邏輯+頁面開發詳細說明)

功能描述:實現複製一張表單及其相關聯的章節、字段(jsp頁面可修改表單的名稱bdmc及地點信息fcmc)
實現過程:創建一個複製對象copy,將原對象的各字段複製到copy中,並將複製來的id置爲空;再根據原對象id遍歷其章節列表,再根據章節遍歷字段信息。
對應關係:一個質量表單中包含多個章節,一個章節包含多個字段(zlbd的id對應zj的bdid,zj的id對應zd的zjid)

1、Action層跳轉(ShfwZlbdAction.java)

// 跳轉
protected static final String COPY_JSP = "/xcfw/zlbd/shfwZlbd_copy.jsp";
//供jsp頁面調用複製質量表單copy方法(下文3.3)
public void copyzlbd(){
        Map<String, Object> resInfo = null;
        try {
            shfwZlbdManager.copy(shfwZlbd.getKey(),shfwZlbd.getBdmc(),shfwZlbd.getFcid());
            resInfo = ResInfo.getResInfo("",false, false, 2, this.OPERATE_SUCCESS,"");
        } catch (Exception e) {
            e.printStackTrace();
            resInfo = ResInfo.getResInfo("",false, false, 1,this.OPERATE_FAILED,"");
        }       
        outXmlJson(resInfo);
    }
    //跳轉至複製jsp頁面(下文3)
    public String createCopy(){
        return COPY_JSP;
    }

2、業務邏輯(ShfwZlbdManager.java)

// 傳入三個參數
public void copy(String id,String bdmc, Long fcid) throws IllegalAccessException, InvocationTargetException{

        //根據id查找該zlbd的內容
        ShfwZlbd zlbd = shfwZlbdDao.getById(id);

        //新建複製對象
        ShfwZlbd zlbdcopy = new ShfwZlbd();

        //使用工具,將zlbd的內容複製到zlbdcopy中
        BeanUtils.copyProperties(zlbdcopy,zlbd);

        //將複製來的id置空
        zlbdcopy.setId(null);

        //設置複製表單的bdmc及fcmc、fcid
        zlbdcopy.setBdmc(bdmc);
        zlbdcopy.setFcid(fcid);
        ShfwFcxx fcxx = shfwFcxxDao.getById(fcid);
        if(fcxx != null){
            zlbdcopy.setFcmc(fcxx.getFcmc());
        }

        //存入數據庫
        shfwZlbdDao.save(zlbdcopy);
        shfwZlbdDao.flush();

        //複製章節(數組集合),根據zlbd的id查找章節
        List<ShfwZlbdZj> zjList = shfwZlbdZjDao.searchByBdid(id);
        //判斷不爲空
        if(zjList != null && zjList.size()>0){
            //遍歷章節列表
            for(ShfwZlbdZj zj : zjList){
                //新建一個複製對象
                ShfwZlbdZj copyzj = new ShfwZlbdZj();
                //將獲取的章節列表中的每個章節複製到copyzj中
                BeanUtils.copyProperties(copyzj,zj);
                //將複製章節下的表單名稱設置爲前面複製的表單的id,並存入數據庫
                copyzj.setBdid(zlbdcopy.getId());
                shfwZlbdZjDao.save(copyzj);
                shfwZlbdZjDao.flush();

                //複製字段(同複製章節)
                List<ShfwZlbdZd> zdList = shfwZlbdZdDao.searchZdList(zj.getId());
                if(zdList != null && zdList.size()>0){
                    for(ShfwZlbdZd zd : zdList){
                        ShfwZlbdZd copyzd = new ShfwZlbdZd();
                BeanUtils.copyProperties(copyzd,zd);
                        copyzd.setZjid(copyzj.getId());
                        shfwZlbdZdDao.save(copyzd);
                    }
                }

            }
        }
    }

3、JSP頁面
3.1、在list頁面上的每一條記錄添加一個複製按鈕

<a href="#" onclick="Ext.milan.pagejs.page_shfwZlbd.showEditCopyForm('${item.id}')"><img src="skins/default/images/icons/ico-edit.gif" />複製表單</a>

3.2、page_shfwZlbd.js添加打開頁面

Ext.milan.pagejs.page_shfwZlbd.showEditCopyForm = function(id) {
    var url = Ext.milan.pagejs.page_shfwZlbd.REQUEST_ACTION + "/createCopy.do?key=" + id;
    Ext.milan.pagejs.page_shfwZlbd.userWin = Milan.commonutils.createModelPop({
        title:"複製質量表單",
        url:url,
        width:650
    });
};

3.3頁面調用do方法

//shfwZlbd_copy.jsp
action="shfwZlbd/copyzlbd.do"
<s:hidden id="key" name="key" />  //key等同於id,防止混淆
發佈了36 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章