Spring MVC控制器中的对话框

时间:2015-03-24 16:54:22

标签: java spring-mvc servlets

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

基本上我有一个表格,上面有两个按钮。一个按钮将用户带到工作流程中的不同位置,与此问题无关(只是为了解释为什么另一个人不会去任何地方)。

另一个按钮当前返回MVC控制器,调用一些代码将表导出为ex​​cel,然后重新加载网页。这一切都正常,除了我调用对话框的方式是在浏览器下面调用它。我怀疑这是因为我发送了null作为框架,但我不确定要放在哪里呢?

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

非常感谢。

1 个答案:

答案 0 :(得分:0)

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

  1. Web应用程序通过HTTP请求和响应工作。因此,Servlet唯一能做的就是发回一个HTTP响应,指示导出成功。无论您使用传统页面,还是使用AJAX来避免刷新页面,纯粹是您的设计选择。你也可以从一个简单的页面开始,然后在你习惯了正在发生的事情之后再改为AJAX和JQuery。

  2. 将Excel工作表导出到服务器并不意味着您的客户端可以访问它。在这里推测,但您可能需要一种机制供您的用户获取文件。许多webapp使用的一种简单方法是将Excel文件实际发送为Servlet响应本身。因此,当导出完成时,浏览器开始接收文件,用户看到它下载。从您的servlet中,您只需要设置正确的mime-type并设置content-disposition标头以声明该文件是attachment(以便浏览器将其作为文件下载)。

    httpresp.setContentType("text/csv");

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

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

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