在vaadin中将数据库中的表列作为超链接

在vaadin中将数据库中的表列作为超链接,vaadin,Vaadin,我是vaadin的新手,我想将数据库中的vaadin表列作为超链接。我试过使用这个代码。这里我在代码中使用PagedTable而不是普通的vaadin表。我尝试了所有可能的方法,但我没有得到结果。在制作超链接后,如果用户单击该链接,我需要显示弹出窗口 if (rs.next()) { Object dashboardDataRowId = _reportTable.addItem(); Link l = new Link(

我是vaadin的新手,我想将数据库中的vaadin表列作为超链接。我试过使用这个代码。这里我在代码中使用PagedTable而不是普通的vaadin表。我尝试了所有可能的方法,但我没有得到结果。在制作超链接后,如果用户单击该链接,我需要显示弹出窗口

        if (rs.next()) {
        Object dashboardDataRowId = _reportTable.addItem();

                    Link l = new Link("rs.getInt(1)", new ExternalResource(
                            "#"));

                    _reportTable.getItem(dashboardDataRowId)
                            .getItemProperty("todo").setValue(l);
                    _reportTable.getItem(dashboardDataRowId)
                            .getItemProperty("watchlist")
                            .setValue(rs.getInt(2));
                    _reportTable.getItem(dashboardDataRowId)
                            .getItemProperty("terminated")
                            .setValue(rs.getInt(3));
                    _reportTable.getItem(dashboardDataRowId)
                            .getItemProperty("processed")
                            .setValue(rs.getInt(4));
                    _reportTable.getItem(dashboardDataRowId)
                            .getItemProperty("total")
                            .setValue(rs.getInt(5));

                }
            } catch (Exception e) {
                logger.error(
                        "Error loading dashboard report. Exception: {}",
                        e.getMessage());
                logger.debug("Error loading dashboard report.", e);
                showWarningNotification(
                        "Error loading dashboard report. Please contact admin",
                        "Error message is " + e.getMessage());

            } finally {
                rs.close();
                stmt.close();
            }

        }
    });

}

private void populateReportTableColumns(final PagedTable reportTable) {

    reportTable.addContainerProperty("todo", Link.class, "-", "To Do",
            null, null);

    // reportTable.addContainerProperty("watchlist", Link.class, new
    // Link("Watch List", new ExternalResource("#")), "Watch List", null,
    // null);
    reportTable.addContainerProperty("watchlist", Button.class, "-",
            "Watch List", null, null);
    reportTable.addContainerProperty("terminated", Button.class, "-",
            "Terminated", null, null);
    reportTable.addContainerProperty("processed", Button.class, "-",
            "Processed and Closed", null, null);
    reportTable.addContainerProperty("total", Button.class, "-", "Total",
            null, null);
}

您可以使用生成的列来完成此操作

您只需设置url,而不是将链接对象添加为项目属性值:

_reportTable.getItem(dashboardDataRowId).getItemProperty("todo").setValue("http://vaadin.com");
并让列生成器从url创建链接对象:

reportTable.addGeneratedColumn("link", new Table.ColumnGenerator() {

            @Override
            public Object generateCell(Table source, Object itemId, Object columnId) {
                String url = (String) source.getItem(itemId).getItemProperty("todo").getValue();
                return new Link("LinkTitle", new ExternalResource(url));
            }
        });
这是未经测试的代码,但通常应该是这样工作的

编辑: 在Vaadin中,让链接在新窗口中打开的最确定的方法是使用BrowserWindowOpener。您需要使用按钮而不是链接,但如果您希望它看起来仍然一样,可以将按钮样式设置为链接:

Button link = new Button();
link.setStyleName(Runo.BUTTON_LINK); // use the theme you are currently extending here
BrowserWindowOpener opener = new BrowserWindowOpener(new ExternalResource("http://vaadin.com"));
opener.extend(link);
或者,您可以将链接目标设置为_blank,但大多数浏览器会在新选项卡而不是窗口中打开此链接:

link.setTargetName("_blank");
我明白了

Link link = new Link(String.valueOf(rs.getInt(1)), new ExternalResource("#"));
    _reportTable.getItem(dashboardDataRowId)
   .getItemProperty("todo").setValue(link);

现在链接即将到来,但我需要在用户单击链接时显示弹出窗口。

谢谢。但是我需要在用户单击链接时显示弹出窗口。如何在用户单击vaadin中的链接时启用弹出窗口。