GWT Style Not Working in AbstractCell

1.4k views Asked by At

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?

1

There are 1 answers

0
Vinnie On BEST ANSWER

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.