2012-01-06 42 views
1

我正在尝试为我的GWT CellTable创建自定义单元格渲染器。我试图在单元格内设置一个CSS样式,但它不是由于某种原因渲染的。GWT样式不能在AbstractCell中工作

这里是我的自定义单元格渲染器

static class MyStringCell extends AbstractCell<String> implements Cell<String> { 

    interface UncheckedStringTemplate extends SafeHtmlTemplates { 
     @SafeHtmlTemplates.Template("<div style=\"{0}\"><input type=\"checkbox\"/>{1}</div>") 
     SafeHtml cell(SafeStyles styles, SafeHtml vendorName); 
    } 
    private static UncheckedStringTemplate uncheckedStringTemplate = GWT.create(UncheckedStringTemplate.class); 

    @Override 
    public void render(com.google.gwt.cell.client.Cell.Context context, String value, SafeHtmlBuilder sb) { 
     if (value == null) { 
      return; 
     } 

     SafeHtml vendorName = SafeHtmlUtils.fromString(value); 
     SafeStyles styles = SafeStylesUtils.fromTrustedString("noaccess;");            
     SafeHtml rendered = uncheckedStringTemplate.cell(styles, vendorName); 
     sb.append(rendered); 

    } 
}   

这里的地方我打电话

Column<MyObject, String> userNameSelectedColumn = new Column<MyObject, String>(new MyStringCell()) { 
    @Override 
    public String getValue(MyObject myObject) { 
     return myObject.getName(); 
    } 
};  
vendorPermissions.addColumn(userNameSelectedColumn, "Objects w/ checkboxes"); 

此代码生成这个HTML片段渲染器(注意空的样式)

<div style=""><input type="checkbox">Vendor 1</div> 

所有这一切紧随the GWT example for Creating Custom Cells,我一直无法弄清楚在哪里硫s是错误的 - 或者如果它是一个错误。

但是,我已经使用GWT调试器来检查呈现的字符串,并且它似乎在其中具有样式信息 - 所以它在GWT流水线下方的某个点处被删除,并且在它到达之前我的浏览器。

任何想法?

回答

3

没关系 - 我做错了。如果我这样做

SafeStyles styles = SafeStylesUtils.fromTrustedString("width: 100%;");

,而不是我在做废话的风格的作品。 GWT必须有一些过滤器来删除无意义的样式。

我想要做的是使用这种错误的机制来设置CSS类属性。在Abstract类使用的HTMLTemplate中设置类属性可以预见。