我尽力描述我的情况。 我的wicket站点包含列表wicket组件,其中每个列表元素都有另一个列表。最低级别列表中的每个元素都有一个用于下载某些文件的jax wicket链接。这一切都很好。我习惯了这个AjaxBehaviour。方法startDownload在链接onClick方法中调用此行为。
public void startDownload(AjaxRequestTarget target) {
target.appendJavaScript("window.location.href='" + getCallbackUrl() +"'");
}
请求此行为的方法是:
@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);
}
}
}
现在我需要在下载文件操作后重新加载模型并刷新页面中的一些组件。在代码调用startDownload方法之后,我尝试在方法onclick中将整个页面添加到AjaxRequestTarget。重新加载页面工作正常,但下载文件的窗口不显示。
我认为我必须在其他单独的请求中重新加载页面(也许我错了?),因为在这个请求中我称之为'window.location.href = ....',但我不知道知道如何强制执行第二次重新加载页面的请求。
是否有人有些想法我做错了什么?我该如何解决我的问题?
答案 0 :(得分:1)
似乎你需要这样的东西:
https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow
答案 1 :(得分:0)
似乎我的实现与cwiki.apache.org网站相似。在onRequest方法中,我使用getComponent()。getRequestCycle()。scheduleRequestHandlerAfterCurrent(handler),尽管这不起作用。
可能原因是组件,导致请求被添加到目标(因为我添加到目标整个页面和组件 - 在此示例中为ajaxLink,是此页面的子项)