1. 程式人生 > >SSM+BJUI實現新增和編輯共用一個頁面

SSM+BJUI實現新增和編輯共用一個頁面

場景

SSM+BJUI在對記錄進行新增或者編輯時可以共用一個jsp頁面,然後再進行儲存。

實現

1.主頁面新增兩個按鈕,一個是新增按鈕一個是編輯按鈕。

<!-- 新增按鈕-->
   <shiro:hasPermission name="partnerAdd">
      <a href="${ctx}/sys/cooperativePartnersManageAction/toAdd" class="btn btn-green" data-icon="plus" data-toggle="dialog" data-width="800" data-height="400" data-id="dialog-user" data-mask="true">新增</a>
      </shiro:hasPermission>
      <!-- 編輯按鈕-->
      <shiro:hasPermission name="partnerEdit">< BR>     <ahref="${ctx}/sys/cooperativePartnersManageAction/toEdit?id={#bjui-selected}" class="btn btn-blue" data-icon="edit" data-toggle="dialog" data-width="800" data-height="400" data-id="dialog-user" data-mask="true">編輯</a>
 </shiro:hasPermission>

三個頁面:

partnerMain就是當前主頁面,帶有新增以及編輯的頁面。

partnerEditDlg是新增和編輯共用的頁面。

新增功能實現

1.現在點選新增按鈕,來到對應的action

@RequestMapping(value="/toAdd")
 public ModelAndView toAdd(){
  ModelAndView mv = null;
  try {

    //業務部分程式碼省略
    //傳遞當前的操作型別的標識,左邊是op常量引數,表示操作型別,右邊是add常量引數,表示是新增操作
   mv.addObject(ModelAndViewConstants.OPERATION_KEY,ModelAndViewConstants.OPERATION_VALUE_ADD);
   //傳遞到共用頁面的標題引數,左邊是title常量引數,右邊是要顯示的標題的內容
   mv.addObject(ModelAndViewConstants.TITLE_KEY, "新增合作商戶資訊");
   //跳轉的具體的頁面
   mv.setViewName(ModelAndViewConstants.PARTNER_EDIT_VIEW);
   LogService.getInstance(this).error("進入合作伙伴新增功能成功:" +ModelAndViewConstants.PARTNER_EDIT_VIEW);
  }
  catch(Exception ex) {
   LogService.getInstance(this).error("進入合作伙伴新增失敗:" + ex.getMessage(), ex);
   mv = new ModelAndView("redirect:/error.jsp");
  }
  return mv;
 }

2.通過上面的action可以傳遞要執行的操作型別為add,並跳轉到共用的頁面。
 

<c:set var="ctx" value="${pageContext.request.contextPath}" />
<div class="bjui-pageContent">
 <form action="${ctx}/sys/cooperativePartnersManageAction/doSave" class="pageForm"
  data-toggle="validate"  autocomplete="off">
  <input type="hidden" name="op" id="j_dialog_op"
   value="${param.op}${op}">
  <input type="hidden" name="id"
   id="j_dialog_id" value="${partner.id}">
  <c:if test="${!empty role}">
   <input type="hidden" name="status" id="j_dialog_op"
    value="${partner.status}">
  </c:if>

  <table class="table table-condensed table-hover">
   <tbody>
    <tr>
     <td colspan="2" align="center" valign="middle"><h4>${title}</h4></td>
    </tr>
    <tr>
     <td>
     <label for="name" class="control-label x90">合作方名稱:</label>
     <input class="" id="partnerName" type="text" name="partnerName" data-rule="required;"
       autocomplete="off" value="${partner.partnerName}" />
     </td>
     <td>
     <label class="control-label x90">合作方公司名稱:</label>
            <input class="" id="companyName" type="text" name="companyName" data-rule="required;"
       autocomplete="off" value="${partner.companyName}" />
     </td>
    </tr>
    
   </tbody>
  </table>
 </form>
</div>
<script>

</script>
<div class="bjui-pageFooter">
 <ul>
  <li><button type="button" class="btn-close" data-icon="close">關閉</button></li>
  <li><button type="submit" class="btn-default" data-icon="save">儲存</button></li>
 </ul>
</div>

主要功能點;

在共享頁面新增隱藏input,來接受傳過來的op引數,即操作型別,這裡是add

因為是新增所以傳過來的實體類partner沒有ID等屬性,但是要在編輯要用到,所以這裡也新增一個hidden。

這裡只顯示一個欄位,其他的省略。

3.點選儲存時,BJUI會提交當前form,此form會提交到:${ctx}/sys/cooperativePartnersManageAction/doSave,然後執行儲存的操作。

@ResponseBody
 @RequestMapping(value="/doSave")
 public Map<String, Object> doSave(SysPartners entity, String op) {
  Map<String, Object> jsonResult = null;
  try {
   //正式業務部分開始
   //與配置許可權管理中相對應,實現新增或編輯完實時更新
   String tabid = tabid(ModelAndViewConstants.PARTNER_SYS_ID);
   //如果是測試簽約
   if(entity.getContractStatus()==0) {
    entity.setTestContractTime(new Date());
    entity.setContractStatusName("測試簽約");
   }
   //如果是正式簽約
   if(entity.getContractStatus()==1) {
    entity.setFormalContractTime(new Date());
    entity.setContractStatusName("正式簽約");
   }
   entity.setRecordTime(new Date());
   //獲得當前使用者的id和name,加入客戶物件中
   ShiroUser currentUser = (ShiroUser)SecurityUtils.getSubject().getPrincipal();
   entity.setModifyUserId(currentUser.getUserId());
   entity.setModifyUserName(currentUser.getAccount());
   //正式業務部分結束
   //如果op標誌引數為空,或者為add 那麼就執行新增操作
   if (null == op || ModelAndViewConstants.OPERATION_VALUE_ADD.equals(op)) {
    //此欄位表示資料未被更改
    entity.setStatus("0");
    //執行插入資料操作,方法是有程式碼生成工具自動生成
    int count = this.sysPartnersService.insert(entity);
    if (count > 0) {
     LogService.getInstance(this).debug("新增客戶資訊成功!");
    }
   }
   else {
    //如果不是,則就是編輯後的儲存操作
    //獲取現存資料,也是通過程式碼生成工具生成的方法
    SysPartners currentSysPartner = this.sysPartnersService.getByPrimaryKey(entity);
    int count = this.sysPartnersService.updateByPrimaryKey(entity);
    if (count > 0) {
     LogService.getInstance(this).debug("編輯合作商戶資訊成功!");
    }
   }
   Integer statusCode = 200;
   String msg = "合作商戶資訊儲存成功";
   jsonResult = JsonResult.jsonReturn(statusCode, msg, tabid);
  }
  catch(Exception ex) {
   LogService.getInstance(this).error("儲存合作商戶資訊失敗:" + ex.getMessage(), ex);
   String msg =  "儲存合作商戶資訊失敗:" + ex.getMessage();
   jsonResult = JsonResult.jsonReturnErr(msg);
  }
  return jsonResult;
 }

編輯功能實現

1.現在點選主頁面的編輯按鈕

<!-- 編輯按鈕-->
      <shiro:hasPermission name="customerEdit">
      <a href="${ctx}/sys/sysCustomerAction/toEdit?id={#bjui-selected}" class="btn btn-blue" data-icon="edit" data-toggle="dialog" data-width="800" data-height="400" data-id="dialog-user" data-mask="true">編輯</a>
      </shiro:hasPermission>

2.點選編輯按鈕會跳到後臺action,並將當前BJUI整合的能獲取選中項的ID傳過去。

現在來到後臺的toEdit

@RequestMapping(value="/toEdit")
 public ModelAndView toEdit(Integer id) {
  ModelAndView mv = null;
  try {
   //根據ID先查詢要編輯的資料
   SysPartners partner = this.sysPartnersService.getByPrimaryKey(id);
   //業務部分程式碼開始
   //獲取簽約狀態,此處是通過關聯碼錶來實現
   Map<String, Object> param = new HashMap<String, Object>();
   //0 表示正常資料
   param.put("status", "0");
   param.put("codeType", "contractStatus");
   //根據引數將相關碼錶內容查詢出來
   List<SysCode> contractStatus = codeService.getByParam(param);
   mv = new ModelAndView();
   //傳遞簽約狀態
   mv.addObject("contractStatus", contractStatus);
   //業務部分程式碼結束
   //傳遞操作型別,這裡是編輯操作
   mv.addObject(ModelAndViewConstants.OPERATION_KEY,ModelAndViewConstants.OPERATION_VALUE_EDIT);
   //jsp頁面要顯示的標題title
   mv.addObject(ModelAndViewConstants.TITLE_KEY, "修改合作商戶資訊");
   //將查詢到的實體Model類傳遞
   mv.addObject(ModelAndViewConstants.PARTMER, partner);
   //跳轉到編輯介面
   mv.setViewName(ModelAndViewConstants.PARTNER_EDIT_VIEW);
  }
  catch(Exception ex) {
   LogService.getInstance(this).error("進入客戶編輯失敗:" + ex.getMessage(), ex);
   mv = new ModelAndView(ModelAndViewConstants.ERROR_VIEW);
  }
  return mv;
 }

關鍵點:

通過傳過來的ID獲取要編輯的Model實體類的資料,然後執行相應的業務,

關鍵是通過:

mv.addObject(ModelAndViewConstants.OPERATION_KEY,ModelAndViewConstants.OPERATION_VALUE_EDIT);

來傳遞操作型別,左邊是常量引數op,右邊是常量引數edit。

然後傳遞要顯示的標題,傳遞獲取的model資料,跳轉到共用的編輯頁面。

3.剩餘操作與新增功能一樣,不過是編輯時將資料傳遞過去,通過input的value來賦值,如果是新增時value為空所以不顯示,如果是編輯則會將傳遞的資料進行顯示,新增與編輯都是執行同一個save方法。