2014-11-06 35 views
1

以下Wicket: FileUploadField with ListView现在我需要允许用户使用FileUploadField旁边的按钮逐个删除文件。Wicket:FileUpload删除重复查看

它正常工作时,这些文件已经得救了,但是当他们不是FileUploadField是reseted ...

所以我已经试过这样:

AjaxLink<Void> deleteLink = new AjaxLink<Void>("deleteLink") { 

      private static final long serialVersionUID = 1L; 

      @Override 
      public void onClick(AjaxRequestTarget target) {  
       EtdConfigForm parent = (EtdConfigForm)EtdDokumentRowForm.this.getParent().getParent().getParent().getParent().getParent(); 
       EtdDokumentRowPanel panel = (EtdDokumentRowPanel)EtdDokumentRowForm.this.getParent(); 
       parent.removeDokument(panel); 
       target.prependJavascript("var itemRemove = document.getElementById('"+ panel.getMarkupId() + "');" + 
         "itemRemove.parentNode.removeChild(itemRemove);" + 
         "Wicket.$('" + panel.getParent().getParent().getMarkupId() + "').children('"+ panel.getMarkupId()+"').remove();"); 
       target.addComponent(parent); 
      } 
     }; 
     add(deleteLink); 

但它不工作...我的意思是ajax片...我做错了什么?

回答

1

首先,根据当前组件的位置,您应该避免此方法的连锁调用,因为它根本不灵活。

要查找输入父组件,您可以使用组件的findParent(final Class<Z> c)方法。

其实,我不明白你的AjaxLink被放置在哪里,但我认为它应该直接在EtdDokumentRowPanel附近FileUploadField

因此,要删除整个EtdDokumentRowPanel,您应该首先将其从RepeatingView中删除,然后执行带删除标记的脚本。当然,如果你把这个面板存储在其他地方(在EtdConfigForm,我想),那么它应该从那里删除。

不要在父对象中搜索RepeatingView,最好通过构造函数将它传递给每个EtdDokumentRowPanel

这将是类似的东西:

public class EtdDokumentRowPanel extends Panel 
{ 
    ... 
    public EtdDokumentRowPanel (String id, EtdDokument doc, final RepeatingView view) 
    { 
     //your panel should have markup id: 
     setOutputMarkupId (true); 
     ... 
     AjaxLink<Void> deleteLink = new AjaxLink<Void> ("deleteLink") 
     {  
      @Override 
      public void onClick (AjaxRequestTarget target) 
      { 
       EtdDokumentRowPanel thisPanel = EtdDokumentRowPanel.this; 

       // removing row panel from RepeatingView: 
       view.remove (thisPanel); 

       // execute this js to remove child from Wicket parent component: 
       target.prependJavascript ( 
         "Wicket.$('" + view.getParent().getMarkupId() + "')" + 
         ".removeChild(Wicket.$('" + thisPanel.getMarkupId() + 
         "'));");  
      } 
     }; 
     add (deleteLink); 
     ... 
    } 
} 
+1

是,按钮是行面板。很多人非常感谢你的善意帮助。 – diminuta 2014-11-28 09:19:04