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

Making Table columns from database as hyperlinks in vaadin

我是 vaadin 的新手,我想将数据库中的 vaadin table 列作为 hyperlinks。我试过这个 code.Here 我在我的代码中使用 PagedTable 而不是普通的 vaadin table。我尝试了所有可能的方法,但我没有得到 result.After 制作那个 hyperlinks,如果用户点击那个 link 我需要显示 POPUP Window。

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

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

无需将 Link 对象添加为项目 属性 值,您只需设置 url:

_reportTable.getItem(dashboardDataRowId).getItemProperty("todo").setValue("http://vaadin.com");

并让列生成器从 url:

创建 Link 对象
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 中让 link 在新的 window 中打开的最确定的方法是使用 BrowserWindowOpener。您需要使用按钮而不是 link,但如果您希望它看起来仍然相同,您可以将按钮样式设置为看起来像 link:

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

或者您可以将 link 目标设置为 _blank 但大多数浏览器在新选项卡中打开它而不是 window:

link.setTargetName("_blank");

我知道了。

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

现在 Link 来了,但是我需要在用户点击 link 时显示 弹出窗口