Vaadin 如何在不破坏按钮的情况下,将新的BrowserWindowOpener附加到按钮上?
在Vaadin 7上,我有工作代码:Vaadin 如何在不破坏按钮的情况下,将新的BrowserWindowOpener附加到按钮上?,vaadin,Vaadin,在Vaadin 7上,我有工作代码: private void gridAttachmentsClickItemEventAction(ItemClickEvent event) { // blablabla some code to get the data from the repository byte[] data = bibocoAttachmentResponseEntity.getBody().getContent(); StreamResource.Strea
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);
}
单击网格行时,数据将从该网格中收集
随后的代码通过调用服务从存储库中获取数据字节[]
之后,当用户单击btnAttachmentPreview时,将打开一个新的浏览器选项卡
并显示pdf(即数据字节[]中的内容)
这在第一次使用时效果很好,但是当我在网格中选择新行时,
问题是第二次调用没有将侦听器设置为正确的按钮。
它在新选项卡中再次显示第一个数据字节[],而不是当前数据。。。
方法已被访问,正确的数据[]已第二次加载到数组中,我已检查
我相信btnAttachmentPreview上的侦听器是由于代码而附加的
opener.extend(btnAttachmentPreview);
应该先将其装箱(空或空)。但据我所知,我没有提及此事。
问题是我不想破坏btnAttachmentPreview对象。
(btnAttachmentPreview是一个全局变量,设置为我可能不会更改的布局。我知道,这不太好,但它是一个古老的产品)
当我关闭浏览器并重新启动并单击另一行时,将显示右侧的数据字节[]
有人知道线索吗
您可以使用扩展名的
remove()
方法删除扩展名,即opener.remove()代码>
如果您无法轻松地构造代码以存储对旧打开程序的引用,以便在添加新打开程序时可以使用它,则可以使用btnatachmentpreview.getExtensions()
获取所有当前扩展的集合,然后从中找到适当的扩展(如果有)并调用remove()
在上面。嘿,谢谢。我现在删除了所有的扩展,然后再添加一个新的扩展。