Wicket在另一个请求之后触发请求

Wicket trigger request after another request

本文关键字:请求 之后 Wicket 另一个      更新时间:2023-09-26

我尽力描述我的情况。我的wicket站点包含列表wicket组件,其中每个列表元素都有另一个列表。最低级别列表中的每个元素都有ajax wicket链接来下载一些文件。所有这些都很好。我习惯了这种AjaxBehavior。方法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=…",但我不知道如何强制第二个请求来重新加载页面。

有人知道我做错了什么吗?我该如何解决我的问题?

似乎你需要这样的东西:

https://cwiki.apache.org/confluence/display/WICKET/AJAX+更新+和+文件+下载+在+一个+吹

我的实现似乎与cwiki.apache.org网站上的类似。在onRequest方法中,我使用了getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler),尽管如此,它还是不起作用。

原因可能是组件,该组件导致请求被添加到目标(因为我添加到目标整个页面,而组件-ajaxLink在本例中是该页面的子级)