Как добавить проверку для выпадающего списка и флажка в Wicket java

#java #html #checkbox #wicket #dropdownchoice

#java #HTML #флажок #wicket #выпадающий список

Вопрос:

У меня есть флажок и выпадающий список на странице html. При нажатии кнопки отправки, если выбраны оба из них, должно появиться сообщение об ошибке, что любое из них должно быть обязательным полем, и его просят выбрать хотя бы одно значение.

Я создал новый класс как FormValidator, реализующий IValidator, и переопределил метод validate. Но я не знаю, как использовать значение выбора выпадающего списка и значение флажка при вызове метода отправки и как отображать в html.

Код Java —

 IModel<Project> dropdownModel =   new PropertyModel<Project>(criteria,"selectedBillableProject");
        DropDownChoice<Project> billableProjectsList = new DropDownChoice<>(
                "projectsList",
                dropdownModel,
                billableProjects,
                new ChoiceRenderer<Project>("fullNameWithCustomer"));
        billableProjectsList.setLabel(new ResourceModel("printMonth.billable"));
        
        form.add(billableProjectsList);
 

}

 protected void onSubmit() {
           .....
            validateInputComponents(reportCriteria);
.....
}

public void validateInputComponents(ReportCriteria reportCriteria){

          add(new FormComponentValidator(reportCriteria.getSelectedBillableProject(), unbillableProjectsView.getModelObject()));      

        }
 

Я обновил FormComponentValidtor аналогично:https://cwiki.apache.org/confluence/display/WICKET/Validating связанные поля

Но это приводит к приведенной ниже ошибке onSubmit (). 11-26@22:37:25 ОШИБКА org.apache.wicket.request.cycle.RequestCycle — ошибка при обработке сообщения об ошибке java.lang.Исключение IllegalStateException: ПОТОК в org.eclipse.jetty.server.Response.getWriter(Response.java: 693) в javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:152) в javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:152) в org.springframework.security.web.context.SaveContextOnUpdateOrErrorResponseWrapper.getWriter(SaveContextOnUpdateOrErrorResponseWrapper.java:125 ) в org.apache.калитка.протокол.http.сервлет.ServletWebResponse.write(ServletWebResponse.java:109) в org.apache.калитка.протокол.http.HeaderBufferingWebResponse.write(HeaderBufferingWebResponse.java:179) в org.apache.калитка.протокол.http.BufferedWebResponse$WriteCharSequenceAction.invoke(BufferedWebResponse.java:171) в org.apache.калитка.протокол.http.BufferedWebResponse.writeTo(BufferedWebResponse.java:602) в org.apache.wicket.request.handler.render.WebPageRenderer.response(WebPageRenderer.java:232) в org.apache.wicket.core.request.handler.RenderPageRequestHandler.response(RenderPageRequestHandler.java:175) в org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.response(RequestCycle.java:890) в org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) в org.apache.wicket.request.cycle.RequestCycle.executeExceptionRequestHandler(RequestCycle.java:310) в org.apache.wicket.request.cycle.RequestCycle.executeExceptionRequestHandler(RequestCycle.java:319) в org.apache.wicket.request.cycle.RequestCycle.executeExceptionRequestHandler(RequestCycle.java:319) в org.apache.wicket.request.cycle.RequestCycle.executeExceptionRequestHandler(RequestCycle.java:319) в org.apache.wicket.request.cycle.RequestCycle.executeExceptionRequestHandler(RequestCycle.java:319) в org.apache.wicket.request.cycle.RequestCycle.executeExceptionRequestHandler(RequestCycle.java:319) в org.apache.wicket.request.cycle.RequestCycle.executeExceptionRequestHandler(RequestCycle.java:319) в org.apache.wicket.request.cycle.RequestCycle.executeExceptionRequestHandler(RequestCycle.java:319) в org.apache.wicket.request.cycle.RequestCycle.executeExceptionRequestHandler(RequestCycle.java:319) в org.apache.wicket.request.cycle.RequestCycle.executeExceptionRequestHandler(RequestCycle.java:319) в org.apache.wicket.request.cycle.RequestCycle.executeExceptionRequestHandler(RequestCycle.java:319) в org.apache.wicket.request.cycle.RequestCycle.ProcessRequest(RequestCycle.java:233) в org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289) в org.apache.калитка.протокол.http.Wicket Filter.processRequestCycle(Wicket Filter.java: 259) в org.apache.калитка.протокол.http.Wicket Filter.ProcessRequest(Wicket Filter.java:201) в org.apache.калитка.протокол.http.Wicket Filter.doFilter(Wicket Filter.java:282) в org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1484) в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.Сделайте фильтр (FilterChainProxy.java:330) в org.springframework.security.web.context.SecurityContextPersistenceFilter.Сделайте фильтр (SecurityContextPersistenceFilter.java:87) в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.доФильтр(FilterChainProxy.java:342) в org.springframework.security.web.FilterChainProxy.Дофильтер внутренний (FilterChainProxy.java:192) в org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) в org.springframework.web.filter.Делегирование filterproxy.invokeDelegate(делегирование filterproxy.java:346) в org.springframework.web.filter.Делегирование filterproxy.doFilter(DelegatingFilterProxy.java:262) в org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1484) в org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151) в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) в org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1476) в org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501) в org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) в org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) в org.eclipse.jetty.server.session.Обработчик сеансов.doHandle(SessionHandler.java:231) в org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java: 1086) в org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java: 429) в org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) в org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java: 1020) в org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) в org.eclipse.jetty.server.handler.ContextHandlerCollection.обработайте (ContextHandlerCollection.java:255) в org.eclipse.jetty.server.handler.HandlerCollection.обработайте (HandlerCollection.java:154) в org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java: 116) в org.eclipse.jetty.server.Server.handle(Server.java: 370) в org.eclipse.jetty.server.Абстрактныйhttpconnection.handleRequest(AbstractHttpConnection.java:494) в org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982) в org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043) в org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865) в org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) в org.eclipse.jetty.server.AsyncHttpConnection.обработайте (AsyncHttpConnection.java:82) в org.eclipse.jetty.io.nio.SelectChannelEndPoint.обработайте (SelectChannelEndPoint.java:696) в org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.выполнить (SelectChannelEndPoint.java:53) в org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) в org.eclipse.jetty.util.thread.QueuedThreadPool$ 3.выполнить ( Пул потоков в очереди.java: 543) в java.lang.Thread.run(Thread.java:748)

Я что-то упустил. Пожалуйста, помогите

Комментарии:

1. Пожалуйста, предоставьте некоторый код.

2. @OrAssayag — обновил код

3. Проблема устранена, и я могу отобразить сообщение об ошибке в соответствии с запросом. Но одна вещь, как только я выбираю допустимые входные данные и отправляю, сообщение об ошибке панели обратной связи по-прежнему отображается. Любые предложения о том, как очистить сообщения

4. @OrAssayag — отображаемое сообщение обратной связи сохраняется на странице даже после действительной отправки формы inout . Я попробовал SelectionForm.getFeedbackMessages() , component.getFeedbackMessages() , все пусто . Не удается их очистить. Пожалуйста, дайте мне знать о любых вводных данных .. попытка из давних

Ответ №1:

похоже, у вас отсутствует панель обратной связи в вашей форме для отображения ошибок / сообщений проверки. Взгляните на руководство пользователя здесь и следуйте всему примеру:

https://ci.apache.org/projects/wicket/guide/8.x/single.html#_form_validation_and_feedback_messages

Комментарии:

1. я добавил обратную связь <div style=»color: red» wicket:id=»обратная связь»></div> на HTML-странице. отображается ошибка. Но я хочу, чтобы он отображал пользовательское сообщение об ошибке и должен отображаться только в том случае, если оба флажка и выпадающий список пусты.

2. Посмотрите на живой пример здесь для полного варианта использования пользовательского средства проверки и сообщения: wicket-guide.herokuapp.com/customvalidator/?0 Затем вы можете использовать IFormValidator для обработки нескольких полей ввода.

3. могу ли я добавить пользовательскую проверку с помощью IFormValidator в метод — onSubmit()

4. Пожалуйста, помогите с некоторыми вводными данными о том, как добавить проверку для нескольких компонентов (выпадающий список и флажок) onsubmit()

5. я могу восстановить значения выпадающего списка и флажка в методе onSubmit(), но не уверен, как использовать средство проверки для добавления пользовательского сообщения об ошибке. Не могли бы вы помочь