已关注 Wicket: FileUploadField with ListView现在我需要允许用户使用 FileUploadField 旁边的按钮逐一删除文件。
当文件已经保存时它可以正常工作,但是当文件没有保存时,FileUploadField 会被重置...
所以我尝试过这个:
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部分...我做错了什么?
最佳答案
首先,您应该避免根据当前组件的位置对该方法进行这种链式调用,因为它根本不灵活。
要查找类型化的父组件,您可以使用组件的 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 );
...
}
}
关于java - Wicket:使用 RepeatingView 删除 FileUpload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26780574/