如何在Wicket java中为Dropdownchoice和Checkbox添加验证

如何在Wicket java中为Dropdownchoice和Checkbox添加验证,java,html,checkbox,wicket,dropdownchoice,Java,Html,Checkbox,Wicket,Dropdownchoice,我在html页面中有一个复选框和下拉列表。单击submit(提交)时,如果同时选择了这两个字段,则它们应该是一条错误消息,其中任何一个字段都应该是必填字段,并要求至少选择一个值 我创建了一个新类作为FormValidator,实现了IValidator并重写了validate方法。但我不知道如何在submit方法调用上使用下拉选择值和复选框值,以及如何在html中显示 Java代码- IModel<Project> dropdownModel = new PropertyMode

我在html页面中有一个复选框和下拉列表。单击submit(提交)时,如果同时选择了这两个字段,则它们应该是一条错误消息,其中任何一个字段都应该是必填字段,并要求至少选择一个值

我创建了一个新类作为FormValidator,实现了IValidator并重写了validate方法。但我不知道如何在submit方法调用上使用下拉选择值和复选框值,以及如何在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);
我已更新FormComponentValidTo或类似于:

但它在submit()上导致以下错误。11-26@22:37:25 ERROR 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.saveContextOnUpdate或ErrorResponseWrapper.getWriter(saveContextOnUpdate或ErrorResponseWrapper.java:125) 位于org.apache.wicket.protocol.http.servlet.ServletWebResponse.write(ServletWebResponse.java:109) 位于org.apache.wicket.protocol.http.HeaderBufferingWebResponse.write(HeaderBufferingWebResponse.java:179) 位于org.apache.wicket.protocol.http.BufferedWebResponse$WriteCharSequenceAction.invoke(BufferedWebResponse.java:171) 位于org.apache.wicket.protocol.http.BufferedWebResponse.writeTo(BufferedWebResponse.java:602) 位于org.apache.wicket.request.handler.render.webagerenderer.respond(webagerenderer.java:232) 位于org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175) 位于org.apache.wicket.request.cycle.RequestCycle$handleExecutor.respond(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.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259) 位于org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201) 位于org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:282) 位于org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1484) 位于org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 位于org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 位于org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 位于org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 位于org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 位于org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 位于org.springframework.web.filter.DelegatingFilterProxy.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.SessionHandler.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.handle(ContextHandlerCollection.java:255) 位于org.eclipse.jetty.server.handler.HandlerCollection.handle(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.AbstractHttpConnection.HandlerRequest(AbstractHttpConnection.java:494) 位于org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConn
protected void onSubmit() {
           .....
            validateInputComponents(reportCriteria);
.....
}

public void validateInputComponents(ReportCriteria reportCriteria){

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

        }