我已经尝试了几天而没有运气。
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,请求显示,但是空体)。
答案 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 被触发的条件:
使用no-arg构造函数构建表单: FormPanel f = new FormPanel中(); 即可。如Javadoc中所述:
创建一个新的FormPanel。使用此构造函数创建时,它将 提交到隐藏的< iframe>元素和结果 通过{@link SubmitCompleteHandler}提供的提交。
因此,它是唯一一个触发表单提交完成的人 成功时的事件。
确保被调用的操作返回响应 的内容类型: “text / html的”强>
如果您仍然需要使用外部 NamedFrame ,一种解决方案是在框架上观察 LoadEvent 。它在框架开始加载时被触发,这意味着来自服务器的响应到达: ...
NamedFrame frame = new NamedFrame("test");
frame.addLoadHandler(new LoadHandler()
{
void onLoad(LoadEvent event)
{
//your code here
}
});
希望它有所帮助!