2015-06-22 42 views
1

我在Vaadin 7.4之前使用了一个呈现为FontAwesome-Icon(aka LinkBut​​ton)的链接。Vaadin - 使用FontAwesome在新Vaadin 7.4 Grid中渲染链接图标

 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新的网格通过添加生成列像这样使用我们这样做的BeanItemContainer addGeneratedProperty方法。但是这并没有奏效,布局只是显示了Link-class的对象符号。

任何帮助非常感谢!

回答

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()); 
+0

这工作,谢谢!现在将该值作为HTML-Link从PropertyValueGenerator的getValue()方法返回。 –