SafeHtmlCell列未触发处理程序onBrowserEvent

时间:2015-04-16 10:52:50

标签: java gwt

在gwt cell table列中,我创建了一个SafeHtmlCell.Inside类型的列,我重写了getvalue()onBrowserEvent()方法。但是当我点击列时它没有触发事件。参见下面的

 @Override
 public SafeHtml getValue(final Object object) {
 SafeHtmlBuilder sb = new SafeHtmlBuilder();
 sb.appendHtmlConstant("<B>");
 sb.appendHtmlConstant(value);
 sb.appendHtmlConstant("</B>");
 sb.appendHtmlConstant("<i class='icon-pencil'></i></span>");
 return sb.toSafeHtml();
      }

   @Override
    public void onBrowserEvent(Context context, Element elem,
                        Object object, NativeEvent event) {
           if ("click".equals(event.getType())) {
           EventTarget eventTarget = event.getEventTarget();
            if (elem.isOrHasChild(Element.as(eventTarget))) {
            Element el = Element.as(eventTarget);
            if ("icon-pencil".equals(el.getClassName())) {
                        Window.alert("Successfully clicked");
                                                        }
                                        }
                            }
                    }

如何解决这个问题?我还需要覆盖render()方法吗?

2 个答案:

答案 0 :(得分:1)

创建自定义单元格时,您需要覆盖render方法(而不是getValue方法)并将HTML放在SafeHtmlBuilder sb参数中。

然后,如果你想要监听事件,你需要覆盖onBrowserEvent(正如你所做的那样),但你还需要在你的类的构造函数中指定consumedEvents

您的案例示例:

public class TestCell extends AbstractCell<String> {

  public TestCell() {
    super("click");
  }

  @Override
  public void onBrowserEvent(Context context, Element parent, String value,
                           NativeEvent event, ValueUpdater<String> valueUpdater) {
    if ("click".equals(event.getType())) {
      Window.alert("clicked");
    }
  }

  @Override
  public void render(Context context, String value, SafeHtmlBuilder sb) {
    sb.appendHtmlConstant("<B>");
    sb.appendHtmlConstant(value);
    sb.appendHtmlConstant("</B>");
    sb.appendHtmlConstant("<i class='icon-pencil'></i></span>");
  }
}

答案 1 :(得分:0)

SafeHtmlCell没有点击事件,因此我创建了自己的自定义类,该类扩展了AbstractCell<SafeHtml>并覆盖了onBrowserEvent()

public class CustomSafeHtmlCell extends AbstractCell<SafeHtml>{

    public CustomSafeHtmlCell(){
        super(BrowserEvents.CLICK);
    }

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

    @Override
      public void onBrowserEvent(Context context, Element parent, SafeHtml value, NativeEvent event,
          ValueUpdater<SafeHtml> valueUpdater) {
        String eventType = event.getType();
        if (BrowserEvents.CLICK.equals(eventType)) {
        //logic...

        }
      }

}

并使用此CustomSafeHtmlCell而不是直接使用SafeHtmlCell。