Я стараюсь изо всех сил описать свою ситуацию. Мой сайт калитки содержит список компонентов калитки, где каждый элемент списка имеет другой список. Каждый элемент в списке нижнего уровня имеет ссылку ajax wicket для загрузки некоторого файла. Все это прекрасно работает. Я привык к этому AjaxBehaviour. Метод startDownload этого поведения вызывается в методе link onClick.Запрос триггера калитки по другому запросу
public void startDownload(AjaxRequestTarget target) {
target.appendJavaScript("window.location.href='" + getCallbackUrl() +"'");
}
Метод onRequest такого поведения является:
@Override
public void onRequest() {
IRequestHandler fileTarget = new IRequestHandler() {
@Override
public void respond(IRequestCycle requestCycle) {
if (null != file) {
try {
FileInputStream inputStream = new FileInputStream(file);
WebResponse resp = (WebResponse) requestCycle.getResponse();
resp.setAttachmentHeader(fileName);
String contentType = FileUtils.getFileType(fileName);
if (contentType != null) {
resp.setContentType(contentType);
}
resp.setHeader("Pragma", "anytextexeptno-cache");
resp.setHeader("Cache-Control", "max-age=0");
Streams.copy(inputStream, requestCycle.getResponse().getOutputStream());
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
}
Теперь мне нужно перезагрузить модель и обновить некоторые компоненты на странице после загрузки файла действий. Я попытался добавить целую страницу в AjaxRequestTarget в методе onclick, после того как код вызвал метод startDownload. Перезагрузка страницы отлично работает, но окно с файлом для загрузки не показывает.
Я думаю, что мне нужно перезагрузить страницу в другом, отдельном запросе (может быть, я ошибаюсь?), Потому что в этом запросе я вызываю «window.location.href = ....», но я надеваю ` я знаю, как я могу обеспечить второй запрос для перезагрузки страницы.
Есть ли у кого-то идеи, что я делаю неправильно? И как я могу решить свою проблему?
Там нет смысла в первой выполняя запрос Ajax, а затем перезагружая полную страницу. –