无法使GWT FormPanel正常工作

时间:2009-06-19 23:32:49

标签: java gwt

我已经尝试了几天而没有运气。

final FormPanel form = new FormPanel(new NamedFrame("test"));
form.setAction("/designer");
form.setMethod(FormPanel.METHOD_POST);
VerticalPanel panel = new VerticalPanel();
form.setWidget(panel);

final TextBox tb = new TextBox();
tb.setName("style");
panel.add(tb);
panel.add(new Button("Submit", new ClickHandler() {
public void onClick(ClickEvent event) {
   Window.alert("submitting to:" + form.getTarget());
   form.submit();
    }
}));
form.addSubmitCompleteHandler(new SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event) {
  Window.alert("complete");
  Window.alert(event.getResults());
}
});

在托管模式下,“提交到”警报触发后没有任何反应。在Chrome中,表单加载在单独的选项卡中,但POST本身为空。在Firefox和IE中,警报后没有任何反应。有什么想法吗?

我在/ designer处设置了一个servlet,它从任何页面请求中输出请求标头和正文。我可以从一个纯HTML页面点击这个servlet并查看预期的输出。从GWT开始,没有任何请求出现(除了Chrome,请求显示,但是空体)。

3 个答案:

答案 0 :(得分:2)

尝试将form.setWidget(panel);移到底部。

另外,请确保将表单添加到容器面板,即add(form);,而不是垂直面板。

答案 1 :(得分:1)

您的代码几乎与FormPanel API上的示例完全相同,因此我必须假设逻辑正确。

“/ designer”中是否存在servlet? SubmitCompleteHandler的文档声明onSubmitComplete事件仅在提交成功时触发。

这是一个包含一些示例代码的线程,用于编写处理表单的servlet:http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/77e68fcb9097debc

答案 2 :(得分:0)

我知道这篇文章已有3年历史了,但是为了像我这样的任何一个google在这里的人, 这是 OnSubmitCompleteEvent 被触发的条件:

  1. 使用no-arg构造函数构建表单: FormPanel f = new FormPanel中(); 即可。如Javadoc中所述:

      

    创建一个新的FormPanel。使用此构造函数创建时,它将   提交到隐藏的< iframe>元素和结果   通过{@link SubmitCompleteHandler}提供的提交

    因此,它是唯一一个触发表单提交完成的人 成功时的事件。

  2. 确保被调用的操作返回响应     的内容类型: “text / html的”

  3. 如果您仍然需要使用外部 NamedFrame ,一种解决方案是在框架上观察 LoadEvent 。它在框架开始加载时被触发,这意味着来自服务器的响应到达: ...

    NamedFrame frame = new NamedFrame("test");
    frame.addLoadHandler(new LoadHandler()
    {
        void onLoad(LoadEvent event)
        {
            //your code here
        }
    });
    

    希望它有所帮助!