2015-08-03 22 views
5

Mam listę z linkiem ajax w każdym rzędzie. ten link zarządza własnym procesem usuwania wierszy. cała lista jest opakowana za pomocą WebMarkupContainer. Przez naciśnięcie linku, nazwanego następną logiką 1) element usunięty z DB. 2) zaktualizowany wykaz modelu 3) target.add (WMC) - dodać WebMarkupContainer do AJAX do aktualizacjiWicket ComponentNotFoundException: Komponent został usunięty ze strony

ponieważ lista zawiera więcej niż jeden element każdego usuwania działania rozbił się na renderowanie sceny. Więc po stronie odświeżania widzę, że akcja została wykonana, ale problemem stało się po tym

IKickListener onKickListener = new IKickListener() { 
     @Override 
     public void onKickListener(ListItem<Consultant> item, AjaxRequestTarget target) { 

      Cons modelObject = item.getModelObject(); 
      mUserDAO.remove(modelObject.accountId, getId()); 

      updateListModel(); 
      target.add(mWmc); 
      target.appendJavaScript("console.log("kicked")"); 
     } 
    }; 

     mWmc = new WebMarkupContainer("wmc"); 
     mWmc.setOutputMarkupId(true); 
     add(mWmc); 
     ListView listView = new ConsListView("consList", new PropertyModel<List<? extends Cons>>(this, "consultants"), onKickListener); 
     mWmc.add(listView); 

i wypełnić metoda mojej liście

@Override 
protected void populateItem(final ListItem<ConsPanel.Cons> item) { 
    item.add(new IndicatingAjaxLink("actionKick") { 

     private static final long serialVersionUID = 1L; 

     @Override 
     public void onClick(AjaxRequestTarget target) { 
      mKickListener.onKickListener(item, target); 
     } 
    }); 
} 

Potem otrzymało kolejny ślad stosu

org.apache.wicket.core.request.handler.ComponentNotFoundException: Component 'consPanelPlace:cons:wmc:consList:2:actionKick' has been removed from page. 
    at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:177) 
    at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:865) 
    at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) 
    at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:265) 
    at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:222) 
    at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:293) 
    at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:261) 
    at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:203) 
    at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:284) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

I użyj furtki 7.0.0-M5

AKTUALIZACJA Znalazłem, że gdy mam więcej niż 1 pozycję na liście, wywołanie ajax jest załączone tylko dla pierwszego. Ale po kliknięciu usunięto wszystkie elementy z wyjątkiem jednego. Również link ajaxowy zwany item count count.

+0

Jak często trzeba kliknąć, aby pojawił się ten błąd? – svenmeier

+0

za każdym razem, gdy mam więcej niż jedną pozycję –

Odpowiedz

4

Rozwiązuję problem. Miałem ten sam identyfikator, nie wicket: id, ale ogólny id, dla każdej pozycji. więc słuchacz przyłączył się do pierwszego, ponieważ wicket ajax tego słucha. potem zadzwonił kilka razy. Problem był w znaczniku.

<span class="btn" wicket:id="actionKick" id="kick">Kick</span> 
             ^^^^^^^^^---problem was here 
Powiązane problemy