2011-09-01 82 views
3

我有一個jsp頁面,其中有各種複選框。複選框的值未保存在數據庫中

某些複選框在默認情況下處於禁用狀態,並且已被選中。有一個選項可以創建一個新模板並將值分配給複選框。這些值保存到數據庫中。

我的問題是,所選複選框的保存值始終比用戶選擇的值小2。在調試java代碼時,我發現傳遞的值是由用戶選擇的。但是,禁用複選框的值將保存到數據庫,並且用戶選擇的最後兩個值不會保存到數據庫。

我在此附上挑選選定值的代碼和保存複選框值的代碼。

選擇所選複選框值的代碼。

public ActionForward listSave(ActionMapping mapping, ActionForm form, 
     HttpServletRequest request, HttpServletResponse response) 
     throws Exception { 

    HardwareKey key = SecurityUtils.getKeySecurity(); 
    key.isFeaturePresent(HardwareKey.WS_DATA_EXCHANGE); 

    DataExchangeTemplateForm thisForm = (DataExchangeTemplateForm) form; 
    DataExchangeService service = (DataExchangeService) ServiceLocator 
      .getServiceWithName(DataExchangeService.class.getName()); 
    ActionMessages errors = new ActionMessages(); 
    Integer dexTemplateId = thisForm.getTemplateId(); 

    String[] paramValues = request.getParameterValues("isRequiredFlag"); 
    String[] fieldIds = request.getParameterValues("fieldId"); 
    String[] dataTypeIds = request 
      .getParameterValues("dexDataType.dataTypeId"); 
    String templateType = request.getParameter("templateType"); 
    boolean isDexTemplate = false; 

    String direction = thisForm.getDirection(); 
    String dexTemplateName = thisForm.getDexTemplateName(); 
    if (Validator.isNullOrEmpty(dexTemplateName)) { 
     ActionMessage msg = new ActionMessage("error.data.exchange", 
       " Template name Can't be empty"); 
     errors.add("error.data.exchange", msg); 
     saveErrors(request, errors); 
     return view(mapping, form, request, response); 
    } 
    String dexTemplateVersion = thisForm.getDexVersion(); 
    if (Validator.isNotNullGreaterThanZero(dexTemplateId)) { 
     DexTemplate dexTemplateOld = (DexTemplate) service.getObject(
       DexTemplate.class, dexTemplateId); 
     String profileNameOld = dexTemplateOld.getDescription(); 
     if (!dexTemplateName.equalsIgnoreCase(profileNameOld) 
       && service.isDuplicateTemplateName(dexTemplateName)) { 
      ActionMessage msg = new ActionMessage("error.data.exchange", 
        "Duplicate Template name"); 
      errors.add("error.data.exchange", msg); 
      saveErrors(request, errors); 
      return view(mapping, form, request, response); 
     } 

     service.updateDexTemplateAndParams(dexTemplateName, direction, 
       dexTemplateId, dataTypeIds, paramValues, fieldIds, 
       dexTemplateVersion); 
    } else { 

     if (!service.isDuplicateTemplateName(dexTemplateName)) { 
      if(templateType != null && templateType.equals("extranetDex")) { 
       isDexTemplate = true; 
      } 
      dexTemplateId = service.saveDataExchangeTemplate(
        dexTemplateName, direction, dexTemplateVersion, isDexTemplate); 
      // saving params...    
      service.saveDexTemplateParams(dexTemplateId, dataTypeIds, 
        paramValues, fieldIds); 
     } else { 
      ActionMessage msg = new ActionMessage("error.data.exchange", 
        "Duplicate Template name"); 
      errors.add("error.data.exchange", msg); 
      saveErrors(request, errors); 
      return view(mapping, form, request, response); 
     } 
    } 

代碼來保存選定的複選框值:

public void saveDexTemplateParams(Integer dexTemplateId, 
     String[] dataTypeIds, String[] paramValues, String[] fieldIds) 
     throws BaajaException { 

    DexTemplate dexTemplate = (DexTemplate) getObject(DexTemplate.class, 
      dexTemplateId); 
    hibernateInitialize(dexTemplate); 
    int fieldOrder = 1; 
    if(paramValues!=null){ 
    for (int i = 0; i < paramValues.length; i++) { 
     if (!Validator.isNullOrEmpty(paramValues[i]) 
       && paramValues[i].equalsIgnoreCase("true")) { 

      DexTemplateField templatefield = new DexTemplateField(); 
      DexField dexField = (DexField) getObject(DexField.class, 
        Integer.parseInt(fieldIds[i])); 

      templatefield.setDexField(dexField); 
      templatefield.setDexTemplate(dexTemplate); 
      templatefield.setFieldOrder(fieldOrder++); 

      saveObject(templatefield); 
     } 

請推薦任何可能的解決方案。

+0

您可以嘗試通過在代碼中的各個位置放置調試語句來進行調試,您可以看到保存的值在哪裏增加了兩次並對其進行糾正。 – bdares

+1

值不會在代碼中的任何位置遞增。我嘗試過放置調試語句。但它在保存時用預選複選框的值替換用戶選擇的值。我無法找到發生此替換的語句。 .. – Surjit

+0

在上面給出的代碼中,paramValues是用戶選擇的複選框的值。 – Surjit

回答

2

檢查最後2個複選框的名稱/ ID是否與其他複選框相同。

建議如果您使用Struts框架,請使用FormBean附加到JSP窗體。在該FormBean中,使用與<html:checkbox>的屬性屬性相同的名稱聲明ArrayList。這將幫助您最大限度地減少您的支持/維護時間。