来自Vaadin Grid ButtonRender的PopupView

时间:2018-01-31 16:39:22

标签: java image blob vaadin

所以我认为这可能与StreamSource有关但我无法解决问题。基本上我有一个Vaadin Grid,可以从SQL数据库中检索它的数据。 "图像"列保存上载图像的BLOB值(成功方法)。

我尝试做的是允许用户点击表格中的按钮并在弹出视图中显示该图像。

我的ViewExpenses类:

REPLACE

我的后端DbController类获取图像的方法:

aGrid.addColumn(reciept -> "Receipt", new ButtonRenderer<>(clickEvent ->{
        new ButtonRenderer<>(clickEvent ->{

                Window window = new Window();
                window.setModal(true);
                window.addCloseShortcut(ShortcutAction.KeyCode.ESCAPE, null);
                UI.getCurrent().addWindow(window);
                Expenses anExpense = aGrid.getSelectionModel().getSelectedItems().stream().findFirst().get();
                long anID =  anExpense.getId();
                System.out.println(anID);
                StreamResource.StreamSource streamSource = (StreamResource.StreamSource)aController.getImage(anID);
                System.out.println("4");
                StreamResource streamResource = new StreamResource(streamSource,"");
                Embedded embedded = new Embedded("",streamResource);
                System.out.println("5");
                Image anImage = new Image("Reciept", streamResource);
                window.setContent(anImage);
                anImage.setSizeFull();
                window.setSizeFull();

            })
    );

我一直在摸不着头脑,我很感激任何帮助。

1 个答案:

答案 0 :(得分:2)

您永远不会显示PopupView。然后,当单击该按钮时,侦听器初始化一个新的PopupView但不对其执行任何操作。

你可以:

  1. 单击按钮时打开模态窗口:

    Window window = new Window();
    window.setModal(true);
    window.addCloseShortcut(KeyCode.ESCAPE, null);
    UI.getCurrent().addWindow(window);
    Image anImage = ...
    window.setContent(anImage);
    anImage.setSizeFull();
    window.setSizeFull();
    
  2. 使用呈现PopupView。{/ p>的ComponentRenderer

    grid.addColumn(x->new PopupView(...))
      .setRenderer(new ComponentRenderer())
    
  3. (注意使用组件渲染器会影响性能,按钮渲染器更轻)。