功能描述:實現複製一張表單及其相關聯的章節、字段(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,防止混淆