package vlove.web.wicket;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.RadioGroup;
import org.apache.wicket.markup.html.form.ValidationErrorFeedback;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
public class FormValidatorVisitor implements IVisitor<FormComponent<?>, Void> {
private AjaxRequestTarget target;
public FormValidatorVisitor(AjaxRequestTarget target) {
this.target = target;
}
@Override
public void component(FormComponent<?> formComponent, IVisit<Void> visit) {
if (!formComponent.isValid() && formComponent.isEnabled() && formComponent.isRequired()) {
String errorMessage = null;
FeedbackMessage message = formComponent.getFeedbackMessage();
if (message != null) {
message.markRendered();
ValidationErrorFeedback feedback = (ValidationErrorFeedback) message.getMessage();
errorMessage = StringEscapeUtils.escapeEcmaScript(feedback.getMessage());
}
if (formComponent instanceof RadioGroup<?>) {
target.appendJavaScript(String.format("groupRequired('%s','%s');", formComponent.getMarkupId(), errorMessage));
} else {
target.appendJavaScript(String.format("inputRequired('%s','%s');", formComponent.getMarkupId(), errorMessage));
}
} else {
String compId = formComponent.getMarkupId();
target.appendJavaScript(String.format("clearError('%s');", compId));
}
}
}