Javascript 如何在Tapestry5中同时返回页面和流?
我正在使用Tapestry 5 framework/javascript开发一个web应用程序项目。此应用程序只接受少量输入并返回pdf文件 我得到了一个新的要求,即当用户单击表单提交按钮时禁用它。在生成报告之前,该按钮应保持禁用状态。我计划编写javascript来禁用submit按钮。但在返回pdf文件时,如何重新启用按钮 我已经阅读了Tapestry文档。根据单据,有效的返回类型为“无、字符串、类、页、链接、流”。如果我返回一个页面,我可以重新启用提交按钮。如果我返回一个流,用户将能够下载pdf。但我想两者兼而有之。是否有任何方法可以返回多个对象(可能是另一个对象中的一个对象)。(或者)有人能提出解决这个问题的办法吗Javascript 如何在Tapestry5中同时返回页面和流?,javascript,tapestry,Javascript,Tapestry,我正在使用Tapestry 5 framework/javascript开发一个web应用程序项目。此应用程序只接受少量输入并返回pdf文件 我得到了一个新的要求,即当用户单击表单提交按钮时禁用它。在生成报告之前,该按钮应保持禁用状态。我计划编写javascript来禁用submit按钮。但在返回pdf文件时,如何重新启用按钮 我已经阅读了Tapestry文档。根据单据,有效的返回类型为“无、字符串、类、页、链接、流”。如果我返回一个页面,我可以重新启用提交按钮。如果我返回一个流,用户将能够下载
谢谢我猜您的工作流是表单提交处理程序指向一个页面,该页面在onActivate方法中返回一个流(pdf)。我还猜您应该设置响应头,以便下载文件而不是通过浏览器打开文件 如果执行此操作,浏览器通常会创建一个“另存文件为”对话框,并且当前页面永远不会被导航离开(不会刷新)。您将永远不会收到任何回调,告诉您文件已下载 因此,使用上述工作流,您将无法重新启用按钮作为下载启动或完成的响应。这是因为流响应只是任意二进制数据,而不是浏览器能够执行的html/javascript。不能返回html/javascript+二进制文件数据的混合响应 您所能达到的最佳效果是禁用按钮一段时间,然后重新启用它以防止双击。如果您不想给应用程序增加太多的复杂性,我推荐这种方法 但是,您可以更改工作流,在表单提交和下载之间插入额外的请求响应 i、 e.不直接指向返回流的页面,您可以重新加载当前页面,然后请求下载:
这不是真正的tapestry问题,无论框架如何,您都会遇到相同的问题(除非框架做了一些特殊的事情来处理这种情况)。这就是http/浏览器技术的工作原理。非常感谢您的及时和详细的回复。我将尝试第二种方法(使用meta refresh标记)。但是我喜欢第一种方法,它可以很容易地解决双击问题。很乐意帮忙。如果有效,请打勾。这就是使用stackoverflow的方法。