如何解决如何将新的 BrowserWindowOpener 附加到按钮,而不先破坏按钮?
在 Vaadin 7 上我有工作代码:
private void gridAttachmentsClickItemEventAction(ItemClickEvent event) {
// blablabla some code to get the data from the repository
byte[] data = bibocoAttachmentResponseEntity.getBody().getContent();
StreamResource.StreamSource source = convertByteArrayToStreamResource(data);
String filename = "c:\\droppdf\\"
+"temp"+bibocoAttachmentResponseEntity.getBody().getFileName()+LocalDate.now().toString();
StreamResource resource = new StreamResource(source,filename);
resource.setMIMEType("application/pdf");
resource.getStream().setParameter("Content-Disposition","attachment; filename=" + filename);
BrowserWindowOpener opener = new BrowserWindowOpener(resource);
opener.extend(btnAttachmentPreview);
}
当我点击网格行时,数据是从该网格收集的 其后的代码通过调用服务从存储库中获取数据 byte[]。
之后,当用户点击 btnAttachmentPreview 时,会打开一个新的浏览器选项卡 并显示pdf(这就是数据字节[]中的内容)
这第一次工作正常,但是当我在网格中选择一个新行时, 问题是第二次调用没有将侦听器设置为右侧的按钮。 它在新选项卡中再次显示第一个数据字节 [],而不是当前数据...... 方法访问了,正确的data[]已经第二次加载到数组中了,我查了下。
我相信由于代码附加的 btnAttachmentPreview 上的侦听器
opener.extend(btnAttachmentPreview);
应该先装箱(清空或归零)。但据我所知,我没有提到它。 问题是我不想破坏 btnAttachmentPreview 对象。 (btnAttachmentPreview 是一个全局变量,设置为一个我可能不会改变的布局。我知道,不好,但它是一个古老的产品)
当我关闭浏览器并重新启动并单击另一行时,会显示正确的数据字节[]。
有人知道吗?
感谢任何帮助
解决方法
您可以使用其 remove()
方法删除扩展程序,即 opener.remove();
。
如果您无法轻松构建代码以存储对旧 opener 的引用,以便在添加新打开器时可以使用它,那么您可以使用 btnAttachmentPreview.getExtensions()
获取所有当前扩展的集合然后您可以从中找到合适的分机(如果有)并在其上调用 remove()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。