Значения флажков не сохраняются в базе данных - PullRequest
3 голосов
/ 01 сентября 2011

У меня есть страница jsp, на которой есть различные флажки.

Некоторые из флажков по умолчанию отключены и уже выбраны.Существует возможность создать новый шаблон и присвоить значения флажкам.Эти значения сохраняются в БД.

Моя проблема в том, что сохраненные значения выбранных флажков всегда на два меньше, чем значения, выбранные пользователем.При отладке 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);
        }

Pls Предложите любое возможное решение.

1 Ответ

2 голосов
/ 12 сентября 2011

Проверьте, совпадают ли имена / идентификаторы последних 2 флажков с остальными флажками.

Рекомендуется, чтобы при использовании инфраструктуры Struts использовать FormBean для подключения к форме JSP. В этом FormBean объявите ArrayList с именем, совпадающим с атрибутом свойства <html:checkbox>. Это поможет вам минимизировать время поддержки / обслуживания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...