diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java index 3d0accbf4ed0d73fb1e38a079737639812218c2c..019283e020799d7b82ff934a32b1b6a611d883ed 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java @@ -437,14 +437,21 @@ public class Form { } private final void submit(UserRequest ureq, Event validationOkEvent) { + boolean isValid = validate(ureq); + formWrapperComponent.fireValidation(ureq, isValid, validationOkEvent); + isValidAndSubmitted = isValid; + hasAlreadyFired = true; + } + + public boolean validate(UserRequest ureq) { ValidatingFormComponentVisitor vfcv = new ValidatingFormComponentVisitor(); FormComponentTraverser ct = new FormComponentTraverser(vfcv, formLayout, false); ct.visitAll(ureq); // validate all form elements and gather validation status ValidationStatus[] status = vfcv.getStatus(); - // + boolean isValid = status == null || status.length == 0; - // let the businesslogic validate this is implemented by the outside listener + // let the business logic validate this is implemented by the outside listener for (Iterator<FormBasicController> iterator = formListeners.iterator(); iterator.hasNext();) { FormBasicController fbc = iterator.next(); @@ -452,10 +459,7 @@ public class Form { //let further validate even if one fails. isValid = fbc.validateFormLogic(ureq) && isValid; } - - formWrapperComponent.fireValidation(ureq, isValid, validationOkEvent); - isValidAndSubmitted = isValid; - hasAlreadyFired = true; + return isValid; } diff --git a/src/main/java/org/olat/modules/forms/ui/EvaluationFormExecutionController.java b/src/main/java/org/olat/modules/forms/ui/EvaluationFormExecutionController.java index cabb65bb3d9b4277f9e036fa16709c47c0a3752b..f92ba9d0bf3560647ab8b3befa14b629869f384d 100644 --- a/src/main/java/org/olat/modules/forms/ui/EvaluationFormExecutionController.java +++ b/src/main/java/org/olat/modules/forms/ui/EvaluationFormExecutionController.java @@ -92,8 +92,6 @@ public class EvaluationFormExecutionController extends FormBasicController imple private boolean readOnly; private boolean showDoneButton; - private boolean immediateSave = false; - private EvaluationFormSession session; private final EvaluationFormResponses responses; @@ -270,11 +268,9 @@ public class EvaluationFormExecutionController extends FormBasicController imple @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { if (saveLink == source) { - immediateSave = true; - mainForm.submit(ureq); - } else if (doneLink == source) { - immediateSave = false; - mainForm.submit(ureq); + if(mainForm.validate(ureq)) { + doSaveResponses(); + } } super.formInnerEvent(ureq, source, event); } @@ -292,7 +288,7 @@ public class EvaluationFormExecutionController extends FormBasicController imple @Override protected void formOK(UserRequest ureq) { boolean responsesSaved = doSaveResponses(); - if (!immediateSave && responsesSaved) { + if (responsesSaved) { doConfirmDone(ureq); } } @@ -342,7 +338,7 @@ public class EvaluationFormExecutionController extends FormBasicController imple List<ValidationMessage> messages = new ArrayList<>(); validate(ureq, messages); - if (messages.size() > 0) { + if (!messages.isEmpty()) { for (ValidationMessage message : messages) { sb.append("<p class='o_warning'>").append(message.getMessage()).append("</p>"); } diff --git a/src/main/java/org/olat/modules/forms/ui/TextInputController.java b/src/main/java/org/olat/modules/forms/ui/TextInputController.java index a01405357f9667098c6a52267a67ffcba348a104..b289e631eda83f30dcf4ee7e860cbdb6bf947402 100644 --- a/src/main/java/org/olat/modules/forms/ui/TextInputController.java +++ b/src/main/java/org/olat/modules/forms/ui/TextInputController.java @@ -103,7 +103,7 @@ public class TextInputController extends FormBasicController implements Evaluati @Override protected boolean validateFormLogic(UserRequest ureq) { - boolean allOk = true; + boolean allOk = super.validateFormLogic(ureq); if (textInput.isNumeric()) { String val = singleRowEl.getValue(); @@ -117,7 +117,7 @@ public class TextInputController extends FormBasicController implements Evaluati } } - return allOk & super.validateFormLogic(ureq); + return allOk; } @Override