Java Vaadin网格按钮下的弹出视图

Java Vaadin网格按钮下的弹出视图,java,image,blob,vaadin,Java,Image,Blob,Vaadin,因此,我认为这可能与StreamSource有关,但我无法完全找到问题所在。本质上,我有一个Vaadin网格,它从SQL数据库检索数据。“Image”列保存上载的图像的BLOB值(successful方法) 我试图做的是允许用户单击表中的按钮并在弹出视图中显示该图像 我的课程: aGrid.addColumn(reciept -> "Receipt", new ButtonRenderer<>(clickEvent ->{ new ButtonRender

因此,我认为这可能与StreamSource有关,但我无法完全找到问题所在。本质上,我有一个Vaadin网格,它从SQL数据库检索数据。“Image”列保存上载的图像的BLOB值(successful方法)

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

我的课程:

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();

            })
    );

我已经为此挠头有一段时间了,如果有任何帮助,我将不胜感激。

您永远不会显示
弹出视图。然后,当单击按钮时,侦听器初始化一个新的
PopupView
,但不使用它

您可以:

  • 单击按钮时打开一个模式窗口:

    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();
    
  • 使用渲染
    弹出视图的

    grid.addColumn(x->new PopupView(...))
      .setRenderer(new ComponentRenderer())
    

  • (请注意,组件渲染器的使用可能会影响性能,按钮渲染器更轻)。

    您永远不会显示
    PopupView
    。然后,当单击按钮时,侦听器初始化一个新的
    PopupView
    ,但不使用它

    您可以:

  • 单击按钮时打开一个模式窗口:

    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();
    
  • 使用渲染
    弹出视图的

    grid.addColumn(x->new PopupView(...))
      .setRenderer(new ComponentRenderer())
    

  • (请注意,组件渲染器的使用可能会影响性能,按钮渲染器更轻)。

    sweet因此我选择了第一个选项,100%的人没有意识到使用vaadin可以做到这一点。我已经修改了上面的代码来反映。但是,我现在从handleConnectorRequest类得到一个nullpointer异常。我怀疑这是来自我加载图像的方式。有什么想法吗?也许。。。如果没有堆栈跟踪,很难判断它在哪里失败,顺便说一句,这会导致一个不同的问题,因为您的代码已经更改,现在出现了一个不同的问题。与图像相同的问题没有显示;)因此使用了DBController code.sweet,所以我选择了第一个选项,100%的人都没有意识到使用vaadin可以做到这一点。我已经修改了上面的代码来反映。但是,我现在从handleConnectorRequest类得到一个nullpointer异常。我怀疑这是来自我加载图像的方式。有什么想法吗?也许。。。如果没有堆栈跟踪,很难判断它在哪里失败,顺便说一句,这会导致一个不同的问题,因为您的代码已经更改,现在出现了一个不同的问题。与图像相同的问题没有显示;)因此,DBController代码。