gpt4 book ai didi

java - 使用 AjaxSelfUpdateTimerBehaviour 的 Wicket ListView

转载 作者:行者123 更新时间:2023-12-01 04:23:42 27 4
gpt4 key购买 nike

我想将 ListView 与 AjaxSelfUpdatingTimerBehavior 一起使用。我有一个表单,需要一个位置和一些要使用 MultiFileUploadField 上传的文件。之后,我有一个网络服务女巫将存储它们。因此,当我单击提交按钮时,会出现一个模式窗口。它包含我的 ListView 。当 Web 服务完成时,必须更新此列表。我的问题是,当我设置 AjaxSelfUpdatingTimerBehavior 时,当我尝试它时,它会等待 new AjaxSelfUpdatingTimerBehavior 中提到的秒数,然后列表消失。我试过这个

[1]:https://cwiki.apache.org/confluence/display/WICKET/How+to+repaint+a+ListView+via+Ajax但徒劳。我使用 Wicket 6.8.0。

这是标记

<div class="modal-body" style="display: table-cell;">

<table wicket:id="wholeTable">
<tr wicket:id="files">
<td width="30"><span wicket:id="ajaxSpinner"><img
src="../img/ajax-loader.gif" /></span><span
wicket:id="orderValid"><img
src="../img/ok-16.png" /></span><span
wicket:id="orderFailed"><img
src="../img/ok-16.png" /></span></td>
<td wicket:id="container" style="opacity:0.4"><span wicket:id="putMessage"></span></td>
</tr>
</table>
</div>

这是 Java 代码

WebMarkupContainer wholeTable = new WebMarkupContainer("wholeTable");

IModel<ArrayList<FileUpload>> inputFilesModel = new LoadableDetachableModel<ArrayList<FileUpload>>() {

@Override
protected ArrayList<FileUpload> load() {
return (ArrayList<FileUpload>) inputFiles;
}

};
ListView<FileUpload> fileList = new ListView<FileUpload>("files", inputFilesModel) {

/**
*
*/
private static final long serialVersionUID = 1L;

@Override
protected void populateItem(final ListItem<FileUpload> item) {
final FileUpload file = (FileUpload) item.getModelObject();
WebMarkupContainer container = new WebMarkupContainer("container");
item.add(container);
item.add(new WebMarkupContainer("ajaxSpinner"));
item.add(new WebMarkupContainer("orderValid"));
item.add(new WebMarkupContainer("orderFailed"));
item.get("orderValid").setVisible(false);
item.get("orderFailed").setVisible(false);
container.add(new Label("putMessage", "dépôt de l'archive " + file.getClientFileName()));
}
};
wholeTable.setOutputMarkupId(true);
// Update the whole panel every two second
wholeTable.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(1)));
wholeTable.add(fileList);
target.add(wholeTable);
add(wholeTable);

我希望我已经说清楚了。

提前感谢您的回答,如果我的英语不好,请抱歉。

最佳答案

我相信要正确使用 AjaxSelfUpdatingTimerBehavior,您应该重写“onTimer(AjaxRequestTarget)”方法并将您想要刷新的元素(在您的情况下 - WholeTable)添加到它的 AjaxRequestTarget。

编辑:

更改线路:

wholeTable.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(1)));

致:

wholeTable.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(1)) {
@Override
protected void onTimer(AjaxRequestTarget target) {
target.add(wholeTable);
}
});

关于java - 使用 AjaxSelfUpdateTimerBehaviour 的 Wicket ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18702268/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com