gpt4 book ai didi

java - 如何在 Wicket 中启动文件下载并关闭 (jQuery) 对话框?

转载 作者:行者123 更新时间:2023-12-01 15:40:20 28 4
gpt4 key购买 nike

在 Wicket 应用程序中,我有一个模式对话框,其中包含一个简单的表单和一个按钮。用户输入值(报告参数),然后单击开始下载报告文件(通常为 PDF)的按钮。 (所有表单值都是必需的,Wicket 的验证机制用于确保用户在下载开始之前输入它们。)

也许用图片更好地解释这一点:

enter image description here

我在这里使用 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);
}

该对话框是一个 Wicket 面板(它使用上面的 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 扩展 Link 之外的其他内容,也许,和/或找到一个适当的方法来重写,这将允许我执行关闭 jQuery 对话框所需的一小部分 JavaScript。
  • 研究 jQuery + Wicket 库(例如 jqwicketwiquery ),据称这些库可以使这两个库更好地协同工作。

我最近尝试的是重写方法 getOnClickScript()在 ReportDownloadLink 中,这似乎很有希望(根据 Javadocs,它返回“任何应该使用的 onClick JavaScript”):

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

事实是,这会导致 onClick() 根本不会被调用,即下载不会开始。

我是否可以重写 Wicket(比 Link)更多的“ajaxy”类来组合这些内容:首先初始化下载,然后调用 JS 来关闭对话框?

类似案例有什么建议或经验吗?请注意,我想在这里继续使用 jQuery 对话框,尽管它使诸如此类的事情变得更加复杂。使用下载链接 ( see related question ) 也可以,这样可以让事情变得更容易。

注意:如果您推荐 JQWicket 或 wiQuery,请提供如何执行此操作的示例。

最佳答案

也许您可以尝试仅使用 JQuery 将关闭模式代码绑定(bind)到按钮“click”事件,在模式面板页面中添加类似于 ${"#mySubmit").click(myCloseModalFunction)。它应该保留 Wicket 默认行为并在组合中添加模式关闭。

另一种方法是重写 getOnClickScript(...) 方法,但 JavaScript 必须返回 true,以便浏览器调用继续链接评估并加载相应的 href。如果返回 false,则评估停止。我会建议类似的东西

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

希望对你有帮助...

关于java - 如何在 Wicket 中启动文件下载并关闭 (jQuery) 对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8150695/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com