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);
}
請推薦任何可能的解決方案。
您可以嘗試通過在代碼中的各個位置放置調試語句來進行調試,您可以看到保存的值在哪裏增加了兩次並對其進行糾正。 – bdares
值不會在代碼中的任何位置遞增。我嘗試過放置調試語句。但它在保存時用預選複選框的值替換用戶選擇的值。我無法找到發生此替換的語句。 .. – Surjit
在上面給出的代碼中,paramValues是用戶選擇的複選框的值。 – Surjit