Gwt 具有自定义标题(包含SearchBox和ListBox)的CellTable

Gwt 具有自定义标题(包含SearchBox和ListBox)的CellTable,gwt,Gwt,如何在安全html上创建事件。正如我想对celltable中的列进行过滤一样。 所以我在表的标题处添加了搜索框。我想访问textbox并在textbox上执行一些事件 代码: final MultiSelectionModel selectionModel=new MultiSelectionModel(); CellTable cell=新的CellTable(); cell.setSelectionModel(selectionModel,DefaultSelectionEventMana

如何在安全html上创建事件。正如我想对celltable中的列进行过滤一样。 所以我在表的标题处添加了搜索框。我想访问textbox并在textbox上执行一些事件

代码:

final MultiSelectionModel selectionModel=new MultiSelectionModel();
CellTable cell=新的CellTable();
cell.setSelectionModel(selectionModel,DefaultSelectionEventManager.createCheckboxManager());
Column checkColumn=新列(新CheckboxCell(真、假)){
@凌驾
公共布尔getValue(主表对象){
返回selectionModel.isSelected(对象);
}
};
cell.addColumn(checkColumn);
cell.setColumnWidth(checkColumn,20,Unit.PX);
添加(新的主表(“艺术”,“摇动”,21));
添加(新主表(“Joe”,“Black”,47));
添加(新主表(“Sam”,“PArish”,97));
TextColumn name column=新建TextColumn(){
@凌驾
公共字符串getValue(主表s){
返回s.getName();
}
};
TextColumn lastNameColumn=新建TextColumn(){
@凌驾
公共字符串getValue(主表s){
返回s.getLastName();
}
};
TextColumn ageColumn=新建TextColumn(){
@凌驾
公共字符串getValue(主表s){
返回Integer.toString(s.getAge());
}
};
//cell.addColumn(namecolumn,“Name”);
SafeHtmlBuilder=新的SafeHtmlBuilder();
builder.appendHtmlConstant(“

one
名称”); cell.addColumn(namecolumn,builder.toSafeHtml()); SafeHtmlBuilder builder1=新的SafeHtmlBuilder(); builder1.appendHtmlConstant(“

one
Last name”); cell.addColumn(lastNameColumn,builder1.toSafeHtml()); SafeHtmlBuilder builder2=新的SafeHtmlBuilder(); builder2.附加HtmlConstant(

一个
年龄); cell.addColumn(ageColumn,builder2.toSafeHtml()); personCollection.addDataDisplay(单元格); 添加(搜索面板); 垂直面板。添加(单元格); get(“errorLabelContainer”).add(verticalPanel); 最终元素nameInput=DOM.getElementById(“nameInput”); 如果(nameInput!=null) { Event.sinkEvents(nameInput,Event.ONCHANGE); setEventListener(nameInput,newEventListener(){ @凌驾 公共无效onBrowserEvent(事件){ setFilter(nameInput.getInnerText()); personCollection.refresh(); } }); }
我得到nameInput的第一个问题是null。为什么?

这只是样品。我想动态创建此列。
那么,是否可以为运行时生成的DOM元素动态添加DOM事件?

您的代码片段不会显示将verticalpanel添加到页面的位置,如果在搜索DOM树后发生这种情况,则显然不起作用

如果包含输入的
SafeHtml
在从DOM树搜索页面之前被追加到页面,则会找到元素,可以从中侦听事件。下面的代码片段适合我(在加载get app的页面上,您需要带有id容器的容器)

模块加载()上的公共void{
SafeHtmlBuilder=新的SafeHtmlBuilder();
builder.appendHtmlConstant(“

one
名称”); get(“container”).add(新的HTML(builder.toSafeHtml()); 最终元素nameInput=DOM.getElementById(“nameInput”); 如果(nameInput!=null){ Event.sinkEvents(nameInput,Event.ONCHANGE); setEventListener(nameInput,newEventListener(){ 公共无效onBrowserEvent(事件){ alert(nameInput.getInnerHTML()); } }); } }
您的代码片段不会显示将verticalpanel添加到页面中的位置,如果在搜索dom树后发生这种情况,则显然不起作用

如果包含输入的
SafeHtml
在从DOM树搜索页面之前被追加到页面,则会找到元素,可以从中侦听事件。下面的代码片段适合我(在加载get app的页面上,您需要带有id容器的容器)

模块加载()上的公共void{
SafeHtmlBuilder=新的SafeHtmlBuilder();
builder.appendHtmlConstant(“

one
名称”); get(“container”).add(新的HTML(builder.toSafeHtml()); 最终元素nameInput=DOM.getElementById(“nameInput”); 如果(nameInput!=null){ Event.sinkEvents(nameInput,Event.ONCHANGE); setEventListener(nameInput,newEventListener(){ 公共无效onBrowserEvent(事件){ alert(nameInput.getInnerHTML()); } }); } }
方法是将
单元格
用于标题,例如
TextInputCell
,并使用
ValueUpdater
处理更改。

方法是将
单元格
用于标题,例如
TextInputCell
,使用
ValueUpdater
来处理更改。

了解发生了什么的最好方法是研究

您尤其需要查看
CustomHeaderBuilder的代码


我认为很不幸,没有包含标题搜索框的示例,每个人都必须从头开始执行此操作。

了解发生了什么的最好方法是研究

您尤其需要查看
CustomHeaderBuilder的代码

我认为这是不幸的,没有包括一个标题搜索框的例子,每个人都必须这样做
   final MultiSelectionModel<MasterTable> selectionModel=new MultiSelectionModel<MasterTable>();
        CellTable<MasterTable> cell=new CellTable<MasterTable>();
        cell.setSelectionModel(selectionModel, DefaultSelectionEventManager.<MasterTable> createCheckboxManager());

        Column<MasterTable, Boolean> checkColumn = new Column<MasterTable, Boolean>(new CheckboxCell(true, false)) {
            @Override
            public Boolean getValue(MasterTable object) {
                return selectionModel.isSelected(object);
            }
        };
        cell.addColumn(checkColumn);
        cell.setColumnWidth(checkColumn, 20, Unit.PX);
        personCollection.getList().add(new MasterTable("Art", "Shake", 21));
        personCollection.getList().add(new MasterTable("Joe", "Black", 47));
        personCollection.getList().add(new MasterTable("Sam", "PArish", 97));

        TextColumn<MasterTable> namecolumn = new TextColumn<MasterTable>() {
            @Override
            public String getValue(MasterTable s) {
                return s.getName();
            }
        };



        TextColumn<MasterTable> lastNameColumn = new TextColumn<MasterTable>() {
            @Override
            public String getValue(MasterTable s) {
                return s.getLastName();
            }
        };
        TextColumn<MasterTable> ageColumn = new TextColumn<MasterTable>() {
            @Override
            public String getValue(MasterTable s) {
                return Integer.toString(s.getAge());
            }
        };

//        cell.addColumn(namecolumn,"Name");
        SafeHtmlBuilder builder = new SafeHtmlBuilder();
        builder.appendHtmlConstant("<input type=\"text\" id=\"nameInput\" /><br/><br/><select><option>one</option></select><br/><center><b>Name</b></center>");
        cell.addColumn(namecolumn,builder.toSafeHtml());
        SafeHtmlBuilder builder1 = new SafeHtmlBuilder();
        builder1.appendHtmlConstant("<input type=\"text\"/><br/><br/><select><option>one</option></select><br/><center><b>Last name</b></center>");
        cell.addColumn(lastNameColumn,builder1.toSafeHtml());
        SafeHtmlBuilder builder2 = new SafeHtmlBuilder();
        builder2.appendHtmlConstant("<input type=\"text\"/><br/><br/><select><option>one</option></select><br/><center><b>Age</b></center>");
        cell.addColumn(ageColumn,builder2.toSafeHtml());
        personCollection.addDataDisplay(cell);
        verticalPanel.add(searchpanel);
        verticalPanel.add(cell);
        RootPanel.get("errorLabelContainer").add(verticalPanel);
        final Element nameInput = DOM.getElementById("nameInput");

        if(nameInput!=null)
        {
            Event.sinkEvents(nameInput, Event.ONCHANGE);
            Event.setEventListener(nameInput, new EventListener() {

                @Override
                public void onBrowserEvent(Event event) {
                    personCollection.setFilter(nameInput.getInnerText());
                    personCollection.refresh();
                }
            });
        }
public void onModuleLoad() {

    SafeHtmlBuilder builder = new SafeHtmlBuilder();
    builder.appendHtmlConstant("<input type=\"text\" id=\"nameInput\" /><br/><br/><select><option>one</option></select><br/><center><b>Name</b></center>");

    RootPanel.get("container").add(new HTML(builder.toSafeHtml()));

    final Element nameInput = DOM.getElementById("nameInput");
    if (nameInput != null) {
        Event.sinkEvents(nameInput, Event.ONCHANGE);
        Event.setEventListener(nameInput, new EventListener() {
            public void onBrowserEvent(Event event) {
                Window.alert(nameInput.getInnerHTML());
            }
        });
    }
}