Я хочу использовать ListView с AjaxSelfUpdatingTimerBehavior. У меня есть форма, которая принимает местоположение и некоторые файлы для загрузки с помощью MultiFileUploadField. После этого у меня есть веб-сервис, который будет хранить их. Поэтому, когда я нажимаю кнопку «Отправить», у меня появляется модальное окно. Он содержит мой список. Этот список необходимо обновить, когда веб-служба будет выполнена. Моя проблема в том, что когда я устанавливаю AjaxSelfUpdatingTimerBehavior, когда я его пытаюсь, он ждет число секунд, указанное в new AjaxSelfUpdatingTimerBehavior
, тогда список исчезает. Я пробовал этоWicket ListView с AjaxSelfUpdateTimerBehaviour
[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);
Я надеюсь, что я ясно.
Заранее благодарим за ваши ответы и извините, если мой английский плохой.
Не проблема, что второй раз при загрузке 'inputFiles' этот список пуст? Причинение таблицы для отображения пустого списка, т. Е. Не отображать какой-либо элемент. – Buurman
Я не думал об этом. Как я могу сделать это, чтобы он не загружался во второй раз или не загружал то, что не было пустым во второй раз ?. Спасибо – hamid
Это зависит от того, как заполняется 'inputFiles'. Можете ли вы показать код, окружающий этот список? – Buurman