我是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);
}
答案 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");