Skip to content

Commit

Permalink
mid-8886 fixed error message while invisible required fields
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Sep 13, 2023
1 parent 27804f4 commit 21693c1
Showing 1 changed file with 46 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,17 @@
import java.util.List;
import java.util.stream.Collectors;

import org.apache.wicket.Component;
import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.validation.IFormValidator;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LambdaModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
import org.apache.wicket.validation.Validatable;
import org.jetbrains.annotations.NotNull;

Expand Down Expand Up @@ -109,6 +115,46 @@ protected ObjectType getObjectType() {
};

validator.validate(validatable);
if (!validatable.isValid()) {
validatable.getErrors().forEach(e -> {
Serializable errorMessage = e.getErrorMessage((key, vars) ->
new StringResourceModel(key)
.setModel(new Model<String>())
.setDefaultValue(key)
.getString());
if (errorMessage!= null && !hasError(form, errorMessage.toString())) {
form.error(errorMessage);
}
});
}
}

private boolean hasError(Form<?> form, String errorMessage) {
if (!form.hasError()) {
return false;
}
Boolean hasError = form.getFeedbackMessages()
.messages(new ComponentFeedbackMessageFilter(form))
.stream()
.anyMatch(m -> errorMessage.equals(m.getMessage().toString()));
if (!hasError) {
hasError = form.visitChildren(Component.class, new IVisitor<Component, Boolean>() {
@Override
public void component(final Component component, final IVisit<Boolean> visit) {
if (!component.hasErrorMessage()) {
return;
}
boolean componentErrorExists = component.getFeedbackMessages()
.messages(new ComponentFeedbackMessageFilter(component))
.stream()
.anyMatch(m -> (m != null) && errorMessage.equals(m.getMessage().toString()));
if (componentErrorExists) {
visit.stop(true);
}
}
});
}
return Boolean.TRUE.equals(hasError);
}

protected abstract PrismObjectWrapper<O> getObjectWrapper();
Expand Down

0 comments on commit 21693c1

Please sign in to comment.