1

GWTCellTableのカスタムセルレンダラーを作成しようとしています。セル内にCSSスタイルを設定しようとしていますが、何らかの理由でレンダリングされません。

これが私のカスタムセルレンダラーです

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>

これはすべて、カスタムセルを作成するためのGWTの例に厳密に従っており、これがどこで間違っているのか、またはそれがバグであるのかを理解できませんでした。

ただし、GWTデバッガーを使用して、レンダリングされた文字列を調べましたが、その時点でスタイル情報が含まれているようです。そのため、GWTパイプラインのさらに下流で、ブラウザーに到達する前に、ある時点で削除されます。

何か案は?

4

1 に答える 1

3

気にしないでください-私はこれを間違ってやっていた。私が次のようなことをすると、スタイルは機能します

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

私がやっていたナンセンスの代わりに。GWTには、無意味なスタイルを削除するためのフィルターが必要です。

私がやろうとしていたのは、このメカニズムを使用してCSSクラス属性を設定することでしたが、これは間違っていました。Abstractクラスで使用されるHTMLTemplateでクラス属性を設定すると、予想どおりに機能します。

于 2012-01-06T21:13:59.743 に答える