如何将GWT用作外部组件引擎?

时间:2011-11-11 17:22:06

标签: gwt

例如,假设我想在我的页面上显示一个CellTable。我想定义行和& Javascript中此单元格表的列,提供数据源,然后调用一个GWT方法,该方法将此单元格表注入页面并进行AJAX调用以使用数据填充它。

重要的是要注意我的应用程序已存在于自己的战争中并部署在服务器上 - 我想部署另一个GWT应用程序战争,并能够从我的应用程序调用javascript并将参数传递给它(通过javascript,例如)这样我就可以自定义我的CellTable列和内容。

问题是GWT应用程序有一个入口点并且它不接受任何参数 - 这意味着我必须使用我在html页面上生成的一些数据来构建我的自定义CellTable,然后在onModuleLoad()中提取。这样做似乎很愚蠢,因为我必须有效地编写某种输入/输出语言并自己解析它,例如:

// entry point
public void onModuleLoad() {
    // Create a CellTable.
    CellTable<Data> table = new CellTable<Data>();
    // suppose we have a hidden element on the HTML page which has the column information for our cell table, i.e. <input type="hidden" id="SomeHiddenFieldValueWithInputs" value="Column1|Column2"/>

    RootPanel cellTableMetaData = RootPanel.get("SomeHiddenFieldValueWithInputs")   ; // suppose the value of this is Column 1|Column2
    String tableColumns = cellTableMetaData.getElement().getAttribute("value");
    String[] columns = tableColumns.split("|");
    for(String columnName:columns)
    {
        // Add a text column to show the name.
        TextColumn<Data> column = new TextColumn<Data>() {
            public String getValue(Data object) {
                return object.getValue(columnName); // this line doesn't even compile because columnName isn't visible here
            }
        };
        table.addColumn(column, columnName);

    }

    RootPanel.get("GwtCellTableContainerDiv").add(table);
}

1 个答案:

答案 0 :(得分:1)

您需要使用跨站点链接器构建您的第二个GWT应用程序(具有自定义CellTable的应用程序)。通过此链接器,GWT可生成可在其他JavaScript应用程序中使用的javascript。 (http://code.google.com/intl/de-DE/webtoolkit/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml关于连接器的部分)

要与CellTable App进行通信,它必须使用JSNI导出一些Javascript函数,以便从javascript中调用,这是一个示例:http://code.google.com/intl/de-DE/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#calling