2012-03-21 5 views
0

На странице Wicket у меня есть изображение (AbstractDefaultAjaxBehavior.INDICATOR), которое отображается в submit, а затем я запускаю AjaxSelfUpdatingTimerBehavior для мониторинга файла.Wicket ссылка для скачивания

Теперь у меня также есть DownloadLink для загрузки того же файла. Однако после загрузки изображение, которое я упоминал выше (которое вращается), перестает вращаться. Есть ли решение этой проблемы? Я новичок в калитки. Пожалуйста, предложите.

public LoggingPage() { 

Form<Void> form; 
    this.add(form = new Form<Void>("resourceForm") { 
     private static final long serialVersionUID = 1L; 

     @Override 
     protected void onSubmit() { 
      submit(); 
     } 
    }); 
    add(new DownloadLink("downloadButton", new AbstractReadOnlyModel<File>() 
    { 
     private static final long serialVersionUID = 1L; 

     @Override 
     public File getObject() 
     { 
      File file; 
      try 
      { 
       file = new File(LoggingPage.this.fileDetail.getLocation()); 
      } 
      catch (Exception e) 
      { 
       throw new RuntimeException(e); 
      } 
      return file; 
     } 
    })); 

}//cons ends 

private void submit() { 
    if (this.serverDetail != null && this.fileType != null && this.fileDetail != null) 
    { 
     if (this.fileViewer != null) 
     { 
      this.repeater.removeAll(); 
     } 
     File file = new File(this.fileDetail.getLocation()); 
     file = new File("C:/ueshome/logs/safe.log"); 
     this.fileViewer = new FileViewer(file); 
     this.fileViewer.startTailing(); 
     log.debug("load of allLog: " + this.fileViewer.getOldLog()); 
     buildItem(this.fileViewer.getOldLog().getLog().toString()); 
     this.container.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(1)) 
     { 
      @Override 
      protected void onPostProcessTarget(final AjaxRequestTarget target) 
      { 
       target.appendJavascript("$('#container').scrollTop(999999999)"); 
       log.debug("onPostProcessTarget: " + LoggingPage.this.fileViewer.hashCode() + "at: " + System.currentTimeMillis()); 
       final FileAttributes fileAttributes = LoggingPage.this.fileViewer.getNewLog(); 
       String newLog = fileAttributes.getLog().toString(); 
       log.debug("nextlog inside load()"); 
       if (newLog != null && newLog.trim().length() > 0) 
       { 
        log.debug("~~~~~~~~~~~~~~~~~~~~````*****:" + newLog); 
        log.debug("String.valueOf(fileAttributes.getSize()))~~~~~~~~~~~~~~~~~~~~````*****:" + String.valueOf(fileAttributes.getSize())); 
        log.debug("String.valueOf(fileAttributes.getLastModified()): " + String.valueOf(fileAttributes.getLastModified())); 

        if (LoggingPage.this.repeater.getSizeInBytes() >= logSize) 
        { 
         LoggingPage.this.repeater.removeAll(); 
        } 
        Component item = buildItem(newLog); 

        target.prependJavascript(String.format(
          "var item=document.createElement('%s');item.id='%s';Wicket.$('%s').appendChild(item);", 
          "div", item.getMarkupId(), LoggingPage.this.container.getMarkupId())); 

        //      LoggingPage.this.imgContainer.setVisible(true); 
        //      target.addComponent(LoggingPage.this.imgContainer); 
        target.addComponent(item); 

        target.appendJavascript("$('#fileAttributesContainer').show(); "); 
        target.appendJavascript("$('#container').scrollTop(999999999)"); 
        target.appendJavascript("$('#imageContainer').show(); "); 

       } 
       else 
       { 
        target.appendJavascript("$('#fileAttributesContainer').show(); "); 
        target.appendJavascript("$('#container').scrollTop(999999999)"); 
        target.appendJavascript("$('#imageContainer').show(); "); 
       } 

       target.appendJavascript("alert('You are in Ajax Self')"); 
      } 
+1

Не могли бы вы предоставить примеры кода? – magomi

+0

Я добавил образец кода. оцените ваш быстрый ответ. – user1521828

+1

В будущем при добавлении кода просто отредактируйте свой вопрос, а не отправляйте его в ответ. – Wilduck

ответ

1

Прежде всего, я должен признать, что я понятия не имею, что может быть неправильным с вашим кодом. Это выглядит совсем не так, как я бы решил вашу задачу.

Как я понимаю, вы хотите иметь изображение (анимированный gif), которое анимируется после того, как пользователь нажимает кнопку отправки, справа. И он должен остановить анимацию после выполнения определенного условия (завершение создания файла и т. Д.). Также вы хотите иметь ссылку для загрузки для своего файла.

Что бы я сделал это

  • Используйте анимированный GIF, который будет показан
  • добавить AjaxSelfUpdatingTimerBehavior, который проверяет файл и, если определенное условие выполнено оно изменяет изображение (возможно, путем изменения образа сам, устанавливает видимость изображения или изменяет некоторый атрибут css для контейнера изображений)
  • для загрузки файла Я бы использовал кнопку ajax или если на вашей стороне ничего не должно быть изменено нормальное соединение, которое обеспечивает поток ресурсов для ваш файл

Надеюсь, это поможет.

+0

спасибо за ваше предложение, и я верю, что это сработает. – user1521828

+0

Можете ли вы привести примерный код для пункта 3 выше (для загрузки файла я бы использовал кнопку ajax или если на вашей стороне ничего не должно быть изменено нормальное соединение, которое доставляет поток ресурсов для вашего файла ) – user1521828

+0

Прошу прощения за это ответ. Я представил простой пример на github: https://github.com/magomi/wicket-download-sample Он предоставляет ярлык и ссылку для загрузки. Когда вы кликнете по ссылке, загрузка будет инициирована И метка будет изменена с помощью ajax. Основная часть этого (AjaxDownloadBehavior) задокументирована в wicket wiki: https://cwiki.apache.org/WICKET/ajax-update-and-file-download-in-one-blow.html – magomi

Смежные вопросы