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

时间:2015-03-13 09:57:58

标签: vaadin

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

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

2 个答案:

答案 0 :(得分:3)

我明白了。

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

现在链接已经到来,但是当用户点击链接时,我需要显示弹出

答案 1 :(得分:1)

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

您只需设置网址:

,而不是将Link对象添加为项属性值
_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的新窗口中打开链接的最常用方法是使用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");