Hi, You can show a veil above the data view container or the whole page until the Ajax response comes.
Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Mon, Nov 3, 2014 at 1:24 PM, Aleksey <[email protected]> wrote: > I use Wicket 1.5.10 and I'm stuck at problem with DataView. > I have overview page which contains filter and some container with > elements. > > You can see simple example prepared by me: > > Filter contains TextField and AjaxLink. > *HTML:* > <p> > <label>Search field</label> > <input wicket:id="filteredField" type="text"> > </p> > <p> > Filter Link > </p> > > *JAVA* > TextField<String> filteredField = new TextField<String>("filteredField", > new > PropertyModel<String>(HomePage.this, "searchLink")); > filteredField.add(new AjaxFormComponentUpdatingBehavior("onchange") { > private static final long serialVersionUID = -4317299769705904431L; > > @Override > protected void onUpdate(AjaxRequestTarget target) { > //do nothing > } > }); > filteredField.setOutputMarkupId(true); > add(filteredField); > > add(new AjaxLink<Void>("filterLink") { > private static final long serialVersionUID = -1544074968276382557L; > > @Override > public void onClick(AjaxRequestTarget target) { > target.add(dataViewContainer); > try { > // use to demonstare the problem > Thread.sleep(1000); > } catch (InterruptedException e) { > e.printStackTrace(); > } > } > }); > > Container with elements is DataView where each element is Link. > *JAVA*: > private class MyDataView extends DataView<String> { > private static final long serialVersionUID = -4473460467718688831L; > > protected MyDataView(String id) { > super(id, new MyDataProvider()); > } > > @Override > protected void populateItem(Item<String> item) { > Link<Void> link = new Link<Void>("elementLink") { > > private static final long serialVersionUID > = 1582520788088815276L; > > @Override > public void onClick() { > > } > > }; > link.add(new Label("label", > item.getModelObject())); > item.add(link); > } > > } > > *HTML*: > <div wicket:id="dataViewContainer"> > <div wicket:id="dataView"> > > </div> > </div> > > If I click on "filterLink" and then immediately click on some link in > DataView, then Wicket throws exception: > <pre> > org.apache.wicket.request.handler.ComponentNotFoundException: Could not > find > component 'dataViewContainer:dataView:5:elementLink' on page 'class > com.mycompany.HomePage > at > > org.apache.wicket.request.handler.PageAndComponentProvider.getComponent(PageAndComponentProvider.java:181) > at > > org.apache.wicket.request.handler.ListenerInterfaceRequestHandler.getComponent(ListenerInterfaceRequestHandler.java:92) > at > > org.apache.wicket.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:239) > at > > org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:784) > at > > org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) > at > org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:255) > at > > org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212) > at > > org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:283) > at > > org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:188) > at > > org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:244) > </pre> > > We meet this problem very often when our customers do not wait for response > and click on a link in DataView. > What do I have to do in this case? What approach is the best here? > > -- > View this message in context: > http://apache-wicket.1842946.n4.nabble.com/Problem-with-dynamic-links-in-DataView-tp4668229.html > Sent from the Users forum mailing list archive at Nabble.com. > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >
