1

I'm attempting to create a custom cell renderer for my GWT CellTable. I'm attempting to set a CSS style inside of the cell, but it's not rendering for some reason.

Here's my custom cell renderer

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

    }
}        

And here's where I'm calling the renderer

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

This code produces this HTML fragment (notice the empty style)

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

All this closely follows the GWT example for Creating Custom Cells and I haven't been able to figure out where this is going wrong - or if it's a bug.

I have, however, used the GWT debugger to examine the rendered String and it does seem to have the style information in it at that point - so it's getting removed at some point further down the GWT pipeline and before it gets to my browser.

Any ideas?

Vinnie
  • 12,400
  • 15
  • 59
  • 80

1 Answers1

3

Nevermind - I was doing this wrong. The style works if I do something like

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

instead of the nonsense I was doing. GWT must have some filter to remove nonsensical styles.

What I was trying to do was set the CSS class attribute using this mechanism which was wrong. Setting the class attribute in the HTMLTemplate used by the Abstract class works predictably.

Vinnie
  • 12,400
  • 15
  • 59
  • 80