有没有办法在servlet控制器中显示(最好是模态)对话框?如果它不是模态的,我可以处理(!?),只要它最初出现在浏览器上方。
基本上我有一个表格,上面有两个按钮。一个按钮将用户带到工作流程中的不同位置,与此问题无关(只是为了解释为什么另一个人不会去任何地方)。
另一个按钮当前返回MVC控制器,调用一些代码将表导出为excel,然后重新加载网页。这一切都正常,除了我调用对话框的方式是在浏览器下面调用它。我怀疑这是因为我发送了null作为框架,但我不确定要放在哪里呢?
JOptionPane.showMessageDialog(null, "Export Completed.", "Excel Export", JOptionPane.INFORMATION_MESSAGE);
非常感谢。
答案 0 :(得分:0)
我不太确定你想从你的问题中实现什么,没有任何代码示例。但是,大概是你在做什么(猜测这里),是你试图从某些数据源导出一些数据并将其转换为Excel文件。你必须记住3件事。
Web应用程序通过HTTP请求和响应工作。因此,Servlet唯一能做的就是发回一个HTTP响应,指示导出成功。无论您使用传统页面,还是使用AJAX来避免刷新页面,纯粹是您的设计选择。你也可以从一个简单的页面开始,然后在你习惯了正在发生的事情之后再改为AJAX和JQuery。
将Excel工作表导出到服务器并不意味着您的客户端可以访问它。在这里推测,但您可能需要一种机制供您的用户获取文件。许多webapp使用的一种简单方法是将Excel文件实际发送为Servlet响应本身。因此,当导出完成时,浏览器开始接收文件,用户看到它下载。从您的servlet中,您只需要设置正确的mime-type并设置content-disposition
标头以声明该文件是attachment
(以便浏览器将其作为文件下载)。
httpresp.setContentType("text/csv");
httpresp.setHeader("Content-disposition", "attachment; filename=\"export.csv\"");
您可能还需要设置文件大小。如果您查找更多详细信息,可以在SO上找到各种完整示例。
执行这些操作时,请记住用户可以中断浏览器或刷新。如果用户按下F5,他可能会导致您的应用程序再次导出。一种常见的方法称为“后跟后重定向”。基本上,您将用户重定向到仅显示结果的页面,而不再执行操作。这样,如果他按下刷新,他只是用消息刷新页面。