我在Vaadin 7.4之前使用了一个呈现为FontAwesome-Icon(又名LinkButton)的链接。使用BeanItemContainer我们通过添加如下生成的列来实现:
table.addGeneratedColumn(FIELD_SHOW_DETAILS_LINK, new Table.ColumnGenerator() {
private static final long serialVersionUID = 1L;
@Override
public Object generateCell(final Table source, final Object itemId, Object columnId) {
final Link link = new Link();
link.setDescription("Show details");
link.setIcon(FontAwesome.SEARCH);
link.setResource(new ExternalResource("#!details/"
+ ((MainVO) itemId).getUid() + "?mode=VIEW"));
link.addStyleName("fa");
return link;
}
});
使用CSS样式:
.fa {
font-family: FontAwesome;
color: gray;
text-decoration: none;
font-weight: normal;
padding-left: 5px;
padding-right: 5px;
}
我试图"翻译"这对于使用PropertyValueGenerator和addGeneratedProperty方法的新Grid。但是这没有用,布局只显示了Link类的对象表示法。
非常感谢任何帮助!
答案 0 :(得分:3)
您可以在GeneratedPropertyContainer中添加生成的属性,该属性返回String属性(FontAwesome.XXX.getHtml())并将HTML-Renderer添加到网格中的该列。
添加属性
GeneratedPropertyContainer gpc = new GeneratedPropertyContainer(your_collection);
gpc.addGeneratedProperty("download", new PropertyValueGenerator<String>() {
@Override
public String getValue(Item item, Object itemId, Object propertyId) {
return FontAwesome.WARNING.getHtml();
}
@Override
public Class<String> getType() {
return String.class;
}
});
并添加渲染器:
grid.getColumn("download").setRenderer(new HtmlRenderer());