2011-11-16 32 views
0

在Wicket應用程序中,我有一個模式對話框,其中包含一個簡單的窗體和一個按鈕。用戶輸入值(報告參數),然後單擊開始下載報告文件的按鈕(通常爲PDF)。如何在Wicket中啓動文件下載並關閉(jQuery)對話框?

enter image description here

我」:(所有表單值是必需的,Wicket的驗證機制來確保用戶輸入他們之前可以開始下載)

也許這是最好用圖片解釋這裏使用的是jQuery UI Dialog(而不是Wicket的ModalWindow,從用戶的角度來看它感覺很笨拙和醜陋)。

一切都很正常,除了關閉對話框單擊下載按鈕時/之後。

當前版本(不相干位忽略):

public class ReportDownloadLink extends Link { 

    public ReportDownloadLink(String id, ReportDto report) { 
     super(id); 
     this.report = report; 
    } 

    @Override 
    public void onClick() { 
     IResourceStream resourceStream = new AbstractResourceStreamWriter() { 
      @Override 
      public void write(OutputStream output) { 
       try { 
        reportService.generateReport(output, report); 
       } catch (ReportGenerationException e) { 
      // ... 
      } 
     } 

     @Override 
     public String getContentType() {       
      // ... 
     } 
    }; 

    ResourceStreamRequestTarget target = 
     new ResourceStreamRequestTarget(resourceStream, report.getFileName()); 
    getRequestCycle().setRequestTarget(target); 
} 

對話框是檢票面板(這使得ReportDownloadLink的使用上文),我們把在一定的div,然後當在被選擇的報告列表,對話是從AjaxLink的onClick(打開)很簡單,就像這樣:

target.appendJavascript(String.format("showReportExportDialog('%s')", ...)); 

調用該js函數:

function showReportExportDialog(dialogTitle) { 
    $("#reportExportPanelContainer").dialog(
     {modal:true, draggable:true, width: 320, height: 330, title: dialogTitle} 
    ); 
} 

一些選項:

  • 讓ReportDownloadLink延長別的東西比鏈接,也許,和/或找到一個合適的方法來覆蓋這將允許我執行JavaScript的點點需要關閉jQuery的對話框。
  • 調查jQuery + Wicket庫(如jqwicketwiquery),據說這兩個庫可以更好地協同工作。
我試着在ReportDownloadLink這似乎有爲是壓倒一切的方法 getOnClickScript()

最新的東西(根據的Javadoc,則返回「任何的onClick的JavaScript應該用於」):

@Override 
protected CharSequence getOnClickScript(CharSequence url) { 
    return "closeDownloadDialog()"; 
} 

事情是,這將導致onClick()根本不會被調用,即下載無法啓動。

難道我也許會覆蓋一些「ajaxy」類從檢票(不是鏈接),把這些東西結合起來:第一 INIT下載,然後電話的JS關閉對話框?

任何類似案件的推薦或經驗值?請注意,我想在這裏繼續使用jQuery對話框,儘管它使這些事情更加複雜。使用DownloadLink(see related question)也很好,以免讓事情變得更簡單。

注意:如果您推薦使用JQWicket或wiQuery,請提供如何執行此操作的示例。

+0

試圖使ReportDownloadLink延長** ** AjaxLink,但我不知道該怎麼給init下載...只是'getRequestCycle()。setRequestTarget(reqTarget)'中的onClick()不會做。 – Jonik

回答

1

也許你可以嘗試使用只有jQuery的按鈕「點擊」事件綁定關閉模態代碼,在你的模式面板頁面添加類似於${"#mySubmit").click(myCloseModalFunction)的東西。它應該保持Wicket默認行爲並在混音中添加模式關閉。

另一種方法是覆蓋getOnClickScript(...)方法,但javascript必須返回true才能讓瀏覽器調用continue鏈接評估並加載相應的href。如果您返回錯誤,評估將停止。我建議像

@Override 
protected CharSequence getOnClickScript(CharSequence url) { 
    return "closeDownloadDialog();return true;"; 
} 

希望它可以幫助...

+0

如果您使用的是jQuery,這裏的第一個選項似乎是最簡單的這種情況。 – jbrookover