다양한 체크 박스가있는 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);
}
}
코드는 체크 박스 값을 선택한 저장합니다.
디버그 문을 코드의 여러 위치에 배치하여 디버깅을 시도 할 수 있으며 저장된 값이 두 번 증분되고 수정 될 수 있습니다. – bdares
값이 코드의 아무 곳에서나 증가하지 않습니다. 디버깅 문을 배치하여 시도했습니다. 그러나 사용자가 선택한 값을 저장시 미리 선택된 확인란의 값으로 바꿉니다.이 대체가 발생하는 명령문을 찾을 수 없습니다. .. – Surjit
위에서 주어진 코드에서 paramValues는 사용자가 선택한 체크 상자의 값입니다. – Surjit