1. 程式人生 > >SSM實現根據後臺控制禁用select

SSM實現根據後臺控制禁用select

場景

在對某條記錄進行編輯時,如果是測試簽約,則可以再進行編輯,更改為正式簽約。

但是如果是正式簽約,則不能再更改為測試簽約。

效果

程式碼實現

1.前端BJUI框架點選編輯按鈕時,將當前選中的ID傳到action

 <!-- 編輯按鈕-->
      <shiro:hasPermission name="customerEdit">
      <a href="${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>

2.來到後臺action,對應上面提交的地址:/sys/cooperativePartnersManageAction/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;
 }

碼錶:

3.然後來到編輯介面

<td >
     <label for="name" class="control-label x90">當前簽約狀態:</label>
     <select data-toggle="selectpicker" name="contractStatus">
              <c:forEach  items= "${contractStatus}" var="cu">
                 <option ${partner.contractStatus == 1?"disabled='disabled'":"" } value="${cu.codeValue}" ${partner.contractStatus == cu.codeValue?"selected='selected'":""}>${cu.codeName}</option>                
                 </c:forEach>
         </select>
     </td>

注:

通過forEach迴圈標籤,將關聯碼錶查詢到的選項全部顯示。

name="contractStatus",屬性與傳過來的實體類的屬性相對應。

items= "${contractStatus}"用來接收從碼錶傳遞的引數,是通過上面action的:

 //傳遞簽約狀態
  mv.addObject("contractStatus", contractStatus);

來傳遞的。

distabled屬性以及selected屬性的顯示使用選擇表示式來實現。