在Wicket應用程序中,我有一個模式對話框,其中包含一個簡單的窗體和一個按鈕。用戶輸入值(報告參數),然後單擊開始下載報告文件的按鈕(通常爲PDF)。如何在Wicket中啓動文件下載並關閉(jQuery)對話框?
我」:(所有表單值是必需的,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庫(如jqwicket或wiquery),據說這兩個庫可以更好地協同工作。
最新的東西(根據的Javadoc,則返回「任何的onClick的JavaScript應該用於」):
@Override
protected CharSequence getOnClickScript(CharSequence url) {
return "closeDownloadDialog()";
}
事情是,這將導致onClick()根本不會被調用,即下載無法啓動。
難道我也許會覆蓋一些「ajaxy」類從檢票(不是鏈接),把這些東西結合起來:第一 INIT下載,然後電話的JS關閉對話框?
任何類似案件的推薦或經驗值?請注意,我想在這裏繼續使用jQuery對話框,儘管它使這些事情更加複雜。使用DownloadLink(see related question)也很好,以免讓事情變得更簡單。
注意:如果您推薦使用JQWicket或wiQuery,請提供如何執行此操作的示例。
試圖使ReportDownloadLink延長** ** AjaxLink,但我不知道該怎麼給init下載...只是'getRequestCycle()。setRequestTarget(reqTarget)'中的onClick()不會做。 – Jonik