2011-09-01 9 views
3

다양한 체크 박스가있는 jsp 페이지가 있습니다.체크 박스 값이 데이터베이스에 저장되지 않았습니다.

일부 체크 박스는 기본적으로 비활성화되어 있으며 이미 선택되어 있습니다. 새 템플릿을 만들고 확인란에 값을 할당하는 옵션이 있습니다. 이 값은 DB에 저장됩니다.

내 문제는 선택한 확인란의 저장된 값이 항상 사용자가 선택한 값보다 2 작습니다. 자바 코드를 디버깅 할 때, 나는 전달 된 값이 사용자에 의해 선택된 것으로 나타났다. 그러나 비활성화 된 체크 박스의 값은 DB에 저장되고 사용자가 선택한 마지막 두 값은 DB에 저장되지 않습니다.

여기서는 선택한 값을 선택하는 코드와 확인란의 값을 저장하는 코드를 첨부합니다.

선택한 체크 박스 값을 선택하는 코드입니다.

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); 
     } 

Pls는 가능한 모든 솔루션을 제안 :

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); 
     } 
    } 

코드는 체크 박스 값을 선택한 저장합니다.

+0

디버그 문을 코드의 여러 위치에 배치하여 디버깅을 시도 할 수 있으며 저장된 값이 두 번 증분되고 수정 될 수 있습니다. – bdares

+1

값이 코드의 아무 곳에서나 증가하지 않습니다. 디버깅 문을 배치하여 시도했습니다. 그러나 사용자가 선택한 값을 저장시 미리 선택된 확인란의 값으로 바꿉니다.이 대체가 발생하는 명령문을 찾을 수 없습니다. .. – Surjit

+0

위에서 주어진 코드에서 paramValues는 사용자가 선택한 체크 상자의 값입니다. – Surjit

답변

2

마지막 두 체크 박스의 이름/ID가 다른 체크 박스의 체크/ID와 동일한 지 확인하십시오.

Struts 프레임 워크를 사용하는 경우 FormBean을 사용하여 JSP 양식에 연결하는 것이 좋습니다. 그 FormBean에서, 프라퍼티 속성이 <html:checkbox> 인 것과 같은 이름으로 ArrayList를 선언하십시오. 이렇게하면 지원/유지 보수 시간을 최소화 할 수 있습니다.

관련 문제