当前位置: 首页 > 知识库问答 >
问题:

Vaadin网格按钮下的弹出视图

罗茂实
2023-03-14

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

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

我的ViewExpenses类:

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

            })
    );

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

 public InputStream getImage(long anIndex){
    InputStream binaryStream = null;
    try{Statement stmt = null;
        int intIndex = (int) anIndex;
        //connect to database
        Class.forName("org.h2.Driver");
        Connection conn = DriverManager.
                getConnection("jdbc:h2:mem:Users", "sa", "");
        System.out.println("Connected database successfully...");
        //insert data
        System.out.println("Getting expenses from the database...");
        stmt = conn.createStatement();
        ResultSet resultSet = stmt.executeQuery("SELECT * FROM EXPENSES");
        Blob imageBlob = resultSet.getBlob(intIndex);
        binaryStream = imageBlob.getBinaryStream(0, imageBlob.length());


    }


        catch (Exception e){

        }
        return binaryStream;
    }

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

共有1个答案

督烨赫
2023-03-14

您永远不会显示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())
    

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

  •  类似资料:
    • 使用任何按钮都可以触发一个弹出菜单,只需要把它放置在一个.btn-group中,并提供适当的弹出菜单标记。 插件依赖 按钮弹出菜单需要你的Bootstrap中调用了弹出菜单插件。 内容 单按钮弹出菜单 通过一些基本的标记变化,将一个按钮变成一个弹出菜单。 <!-- Single button --> <div class="btn-group"> <button type="button"

    • 我正在尝试让selenium按下打印弹出的保存按钮来保存pdf文件。我可以让selenium按下“print”按钮,但一旦弹出窗口出现adress chrome://print/就不会发生任何事情。还有别的办法吗? 到目前为止,这是零件的代码:

    • 问题内容: Vaadin 7中的和组件有什么区别? 我应该使用哪个,什么时候使用? 问题答案: Grid是一个功能更强大的新组件,它应该是Table的后继组件(请参阅Table已死,Grid长寿)。因此,应该没有任何必要偏爱表格而不是网格。 这是Vaadin从表格迁移到网格的一系列文章的第一篇:https : //vaadin.com/blog/-/blogs/mission-rip- table

    • 我想在JavaFX中创建特定的组件。在 onClick 事件后显示 poupup 的按钮。 情景: > < li> 我们单击按钮 弹出显示下面的按钮(如图片上所示)

    • 为了测试目的,我正在玩vaadin 14.2.2。然而,我立即使用网格解决了第一个问题。https://vaadin.com/docs/v14/flow/components/tutorial-flow-grid.html中的示例 不在可视化中生成输出。还有几个要使用的GitHub问题中的提示 不能解决这个问题。有人知道怎么解决这个问题吗?

    • 我有一个带有两个链接按钮的动态gridview。如果我点击链接按钮,事件不会触发。但如果我在页面加载中调用“display”方法,它就可以正常工作了。代码如下 如果我把“显示”方法放在页面加载中,它将调用每个回发。我不想要那个。我想在下拉选择更改事件中调用此方法。如果我把“显示”方法放在那个链接点击事件不触发。所以我必须做什么来克服这个问题。