2015-08-03 26 views
5

Tôi có danh sách có liên kết ajax trong mỗi hàng. liên kết này quản lý quá trình xóa hàng của riêng mình. toàn bộ danh sách được gói với WebMarkupContainer. Bằng cách nhấn vào liên kết, được gọi là logic tiếp theo 1) mục bị xóa khỏi DB. 2) mô hình danh sách cập nhật 3) target.add (wmc) - thêm WebMarkupContainer vào ajax để cập nhậtThành phần WicketNotFoundException: Thành phần đã bị xóa khỏi trang

vì danh sách có sau đó mỗi phần tử loại bỏ hành động bị rơi trên màn hình hiển thị. Vì vậy, sau khi trang làm mới tôi thấy hành động đã được thực hiện, nhưng vấn đề xảy ra sau đó

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

và cư phương pháp danh sách của tôi

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

sau đó tôi recived tiếp theo stack trace

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) 

tôi sử dụng wicket 7.0.0-M5

CẬP NHẬT Tôi đã tìm thấy, rằng khi tôi có nhiều hơn thì 1 mục trong danh sách, ajax gọi lại đính kèm chỉ cho một đầu tiên. Nhưng trên hành động nhấp đã xóa tất cả các mục ngoại trừ một mục. Ngoài ra liên kết ajax được gọi là mục đếm thời gian.

+0

Tần suất bạn phải nhấp để lỗi này xuất hiện? – svenmeier

+0

mỗi lần khi tôi có nhiều hơn thì một mục –

Trả lời

4

Tôi đã giải quyết vấn đề. Tôi đã có cùng một id không wicket: id, nhưng id chung, tại mỗi mục. vì vậy người nghe đã gắn liền với người đầu tiên, bởi vì wicket ajax lắng nghe nó. sau đó nó đã được gọi là vài lần. Sự cố đã được đánh dấu.

<span class="btn" wicket:id="actionKick" id="kick">Kick</span> 
             ^^^^^^^^^---problem was here 
Các vấn đề liên quan