在GWT中使用Widget打开一个新窗口

时间:2010-11-12 17:50:52

标签: gwt new-window

在你开始拍摄我之前我已经检查了答案,我用谷歌搜索直到我的手指流血但我还没有找到一个简单,简洁的答案。所以我再次要求所有那些可能有这个问题的人。

问题:如何打开一个带有formpanel的新窗口。

上下文:我有一个列出了很多项目的应用,我希望有人编辑一个条目,我想要一个新窗口打开,这样他们就可以编辑属性然后点击保存。您在许多应用程序中找到的标准内容。

架构: 我有一个名为UI的客户端模块,它有十几个类,可以从菜单中选择绘制小部件并填充主区域。我有一个名为UI.html的html页面,其中包含标记。多数民众赞成。

我看过的选项

  1. 调用 Window.Open(),但您需要定义一个html文件。我没有。我可以创建一个空的但如何将窗口小部件注入其中?

  2. 使用 jsni $ wnd 创建一个新窗口并获取对它的引用。但是我如何将表单面板注入其中?

  3. 使用 popuppanel 。它们看起来很糟糕 - 如果通过JS打开一个窗口非常简单,我希望它在gwt中。

  4. 也许我很想知道如何使用GWT我不知道。

    任何帮助将不胜感激

    由于

3 个答案:

答案 0 :(得分:12)

我让它工作的方式如下: 我写了一个jsni方法来打开一个新窗口

public static native BodyElement getBodyElement() /*-{
        var win = window.open("", "win", "width=940,height=400,status=1,resizeable=1,scrollbars=1"); // a window object
        win.document.open("text/html", "replace");

我在新窗口中添加了一个基本体并返回了body元素

win.document.write("<HTML><HEAD>"+css1+css2+"</HEAD><BODY><div class=\"mainpanel\"><div style=\"width: 100%; height: 54px;\"><div id=\"mainbody\"class=\"mainbody\" style=\"width: 100%;\"></div></div></div></BODY></HTML>");
        win.document.close(); 
        win.focus();
        return win.document.body;
    }-*/;
然后我从我的主java方法

中调用了这个方法
BodyElement bdElement = getBodyElement();

然后我将具有大量小部件的面板注入到返回的body元素

SystemConfiguration config = new SystemConfiguration();             bdElement.getOwnerDocument().getElementById("mainbody").appendChild(config.getElement());

答案 1 :(得分:1)

我同意Bogdan:使用DialogBox。

如果你不能,你在选项1中提到Window.open()

  1. 创建另一个GWT模块,以及将加载它的form.html
  2. Window.open("form.html?entry=54")
  3. 从网址读取表单gwt模块,加载条目,允许其进行编辑,并提供SaveCancel按钮
  4. 点击SaveCancel时关闭弹出窗口

答案 2 :(得分:0)

你不能只使用DialogBox吗?

Example