2015-08-03 3 views
5

У меня есть список с ссылкой ajax в каждой строке. эта ссылка управляет процессом удаления строк. весь список, завернутый в WebMarkupContainer. Нажимая ссылку, называемую следующей логикой 1) элемент удален из БД. 2) обновленный список модель 3) target.add (ВКИ) - добавить WebMarkupContainer Аякса для обновленияWicket ComponentNotFoundException: Компонент удален со страницы

поскольку список содержит более одного элемент каждых удалить действие разбитой на визуализацию сцены. Таким образом, после обновления страницы я вижу, что действие было сделано, но проблема возникла после того

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); 

и заселить метод моего списка

@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); 
     } 
    }); 
} 

тогда я RECIVED следующий трассировки стека

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 использование калитки 7.0.0-M5

ОБНОВЛЕНИЕ Я обнаружил, что когда у меня есть более одного элемента в списке, обратный вызов ajax привязан только для первого. Но при нажатии на действие удаляются все элементы, кроме одного. Также ссылка ajax называется временем подсчета элементов.

+0

Как часто вы можете нажать эту ошибку, чтобы появиться? – svenmeier

+0

каждый раз, когда у меня есть более одного элемента –

ответ

4

У меня проблема. У меня был такой же идентификатор, а не калитка: id, но общий идентификатор, у каждого элемента. поэтому слушатель присоединился к первому, потому что калитка ajax послушала его. затем он позвонил несколько раз. Проблема была в разметке.

<span class="btn" wicket:id="actionKick" id="kick">Kick</span> 
             ^^^^^^^^^---problem was here 
Смежные вопросы