Spring MVC 控制器中的对话框

Dialog box in Spring MVC controller

有没有办法在 servlet 控制器中显示(最好是模态)对话框?如果它不是模态的,只要它最初出现在浏览器上方,我就可以处理(!?)。

基本上我有一个带有 table 和 2 个按钮的表单。一个按钮将用户带到工作流程中的不同位置,与这个问题无关(只是为了解释为什么另一个按钮没有 'go anywhere')。

另一个按钮当前返回到 MVC 控制器,调用一些代码将 table 导出到 excel,然后重新加载网页。这一切都很好,除了我调用对话框的方式是在浏览器下调用它。我怀疑这是因为我将 null 作为框架发送,但我不确定在其位置放置什么?

JOptionPane.showMessageDialog(null, "Export Completed.", "Excel Export",     JOptionPane.INFORMATION_MESSAGE);

非常感谢。

在没有任何代码示例的情况下,我不太确定你想从你的问题中获得什么。但是,大概您正在做的事情(在这里猜测)是您试图从某个数据源导出一些数据并将其转换为 Excel 文件。你必须记住三件事。

  1. Web 应用程序通过 HTTP 请求和响应工作。所以 Servlet 唯一能做的就是发回一个表明导出成功的 HTTP 响应。无论您是使用传统页面,还是使用 AJAX 来避免刷新页面,都完全是您的设计选择。您也可以从一个简单的页面开始,然后在您习惯了所发生的事情后更改为 AJAX 并结合 JQuery。

  2. 将 excel sheet 导出到服务器并不意味着您的客户端可以访问它。在这里推测,但您可能需要一种机制让您的用户获取文件。许多网络应用程序使用的一种简单方法是实际发送 Excel 文件作为 Servlet 响应本身。所以会发生什么,当导出完成时,浏览器开始接收文件并且用户看到它正在下载。从您的 servlet 中,您只需要设置正确的 mime-type 并设置 content-disposition header 来说明该文件是 attachment(以便浏览器将其下载为文件)。

    httpresp.setContentType("text/csv");

    httpresp.setHeader("Content-disposition", "attachment; filename=\"export.csv\"");

    您可能还需要设置文件大小。如果您要查找更多详细信息,可以在 SO 上找到各种完整示例。

  3. 执行这些操作时请记住,用户可以中断浏览器或刷新。如果用户按 F5,他可能会导致您的应用程序再次执行导出。一种常见的方法称为 'redirect-after-post'。基本上,您将用户重定向到一个只显示结果的页面,而无需再次执行操作。这样,如果他按刷新,他只是用消息刷新页面。