另一个请求后的 Wicket 触发请求
Wicket trigger request after another request
我尽量描述一下我的情况。
我的 wicket 站点包含列表 wicket 组件,其中每个列表元素都有另一个列表。最低级别列表中的每个元素都有 ajax wicket link 来下载一些文件。这一切都很好。我习惯了这个 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);
}
}
}
现在我需要在下载文件操作后重新加载模型并刷新页面中的一些组件。在代码调用 startDownload 方法后,我尝试将整个页面添加到方法 onclick 中的 AjaxRequestTarget。重新加载页面工作正常,但 window 没有显示要下载的文件。
我认为我必须在其他单独的请求中重新加载页面(也许我弄错了?),因为在这个请求中我调用了 'window.location.href=....',但我不知道如何才能强制执行第二个请求以重新加载页面。
有人知道我做错了什么吗?我该如何解决我的问题?
看来您需要这样的东西:
https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow
看来我的实现与 cwiki.apache.org 网站上的类似。在 onRequest 方法中,我使用了 getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler),尽管如此,它还是不起作用。
这可能是组件的原因,导致请求被添加到目标(因为我添加到目标整个页面和组件 - 本例中的 ajaxLink 是该页面的子项)
我尽量描述一下我的情况。 我的 wicket 站点包含列表 wicket 组件,其中每个列表元素都有另一个列表。最低级别列表中的每个元素都有 ajax wicket link 来下载一些文件。这一切都很好。我习惯了这个 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);
}
}
}
现在我需要在下载文件操作后重新加载模型并刷新页面中的一些组件。在代码调用 startDownload 方法后,我尝试将整个页面添加到方法 onclick 中的 AjaxRequestTarget。重新加载页面工作正常,但 window 没有显示要下载的文件。
我认为我必须在其他单独的请求中重新加载页面(也许我弄错了?),因为在这个请求中我调用了 'window.location.href=....',但我不知道如何才能强制执行第二个请求以重新加载页面。
有人知道我做错了什么吗?我该如何解决我的问题?
看来您需要这样的东西:
https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow
看来我的实现与 cwiki.apache.org 网站上的类似。在 onRequest 方法中,我使用了 getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler),尽管如此,它还是不起作用。
这可能是组件的原因,导致请求被添加到目标(因为我添加到目标整个页面和组件 - 本例中的 ajaxLink 是该页面的子项)