Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将GWT应用程序的部分提取到单独对话框库中_Gwt_Module_Entry Point - Fatal编程技术网

如何将GWT应用程序的部分提取到单独对话框库中

如何将GWT应用程序的部分提取到单独对话框库中,gwt,module,entry-point,Gwt,Module,Entry Point,我试图将GWT应用程序的各个部分提取到许多可以从php调用的单独对话框中 现有状态: 我们有一个GWT应用程序,作为战争部署到JBoss。 该应用程序有一个单一的模块和一个单一的入口点。 主JSP设置环境,然后有一些JS使用document.write()加载.nocache.JS; 入口点的onModuleLoad()创建一个面板来填充浏览器,并使用RootPanel.get(“root”).add()将其添加到根目录中; 当某些事件发生时(例如,用户按下按钮),我们通过建立一个子类并调用ce

我试图将GWT应用程序的各个部分提取到许多可以从php调用的单独对话框中

现有状态: 我们有一个GWT应用程序,作为战争部署到JBoss。 该应用程序有一个单一的模块和一个单一的入口点。 主JSP设置环境,然后有一些JS使用document.write()加载.nocache.JS; 入口点的onModuleLoad()创建一个面板来填充浏览器,并使用RootPanel.get(“root”).add()将其添加到根目录中; 当某些事件发生时(例如,用户按下按钮),我们通过建立一个子类并调用center()或setVisible()来弹出一个对话框

所需状态: 我们想要一个具有多个页面的php应用程序,以便能够调用各种DialogBox子类

我认为php端应该使用使用document.write()的JS函数调用; 至于GWT方面,我看到的选项有:

  • 一个模块具有多个入口点
  • 多个模块

  • 有没有人对这里的最佳实践有任何经验或理解?

    如果我理解正确,您需要从Javascript调用GWT方法。 您可以使用JSNI。 但我认为你应该在gwt方面尝试gwt exporter。 为GWT模块创建JS_API是一个简单的GWT模块

    不是假装是最佳实践,只是简单的例子

    在服务器端,您包括一个现有的GWT模块,每个页面上都有对话框。 您需要修改此GWT模块或像这样创建新模块

    public class GwtModule implements EntryPoint {
    @Override
    public void onModuleLoad() {
    
        // exportable class
        DialogBoxManager dbm = new DialogBoxManager();
    
        // export all Exportable classes of module
        ExporterUtil.exportAll();
    
        // needed cause JS_API will be available only after the GWT is loaded
        onLoad();
    }
    
    // call when GWT module loaded
    private native void onLoad() /*-{
        $wnd.loaded();
    }-*/;
    
    DialogBoxManager看起来像这样

    @Export
    @ExportPackage("pkg")
    public class DialogBoxManager implements ClickHandler, Exportable {
    
        private DialogBox db;
    
        public DialogBoxManager() {
    
            this.db = new DialogBox();
        }
    
        @Export("showDB")
        public void showDialog() {
    
            db.setVisible(true);
            db.center();
            db.show();
        }
    
        @Override
        public void onClick(ClickEvent event) {
    
            showDialog();
        }
    
    }
    
    function showDB() {
            if (dbManager != null) {
                dbManager.showDB();
            }
        }
    
    @Export(“show”)、@ExportPackage(“pkg”)等中的字符串值。注释将在带注释的GWT方法的JS_API调用中使用(您也可以导出字段)。 您可以只使用@Export(就像我对DialogBoxManager所做的那样)

    当GWT模块加载到您的JS库中时,您可以实现JS_API成员的初始化或您需要的初始化

    var dbManager = null;
    ...
    
    
     function loaded() {
            dbManager = new pkg.DialogBoxManager();
        }
    
    然后像这样调用JS_API

    @Export
    @ExportPackage("pkg")
    public class DialogBoxManager implements ClickHandler, Exportable {
    
        private DialogBox db;
    
        public DialogBoxManager() {
    
            this.db = new DialogBox();
        }
    
        @Export("showDB")
        public void showDialog() {
    
            db.setVisible(true);
            db.center();
            db.show();
        }
    
        @Override
        public void onClick(ClickEvent event) {
    
            showDialog();
        }
    
    }
    
    function showDB() {
            if (dbManager != null) {
                dbManager.showDB();
            }
        }
    

    谢谢我想我在这里找到了一个更简单的解决方案:这样我就可以在onModuleLoad()中编写:$wnd.computeLoanInterest=$entry(@mypackage.MyUtilityClass::computeLoanInterest(IFI));如果新项目全部使用GWT编写,那么JSNI是最佳选择。另外,最好是一个模块在每个主机页上聚合其他模块。但是你可以使用更多,如果你想。