GWT:我可以在浏览器中调用servlet。当我通过formpanel调用它时,它可以调用onSubmit。但它不调用onSubmitComplete。它还会弹出一个新窗口,uri就是我的servlet。
String URL= GWT.getModuleBaseURL()+"getType";
FormPanel formPanel = new FormPanel();
formPanel.setAction(URL);
formPanel.setEncoding(FormPanel.ENCODING_URLENCODED);
formPanel.setMethod(FormPanel.METHOD_GET);
formPanel.addSubmitHandler(new SubmitHandler(){
@Override
public void onSubmit(SubmitEvent event) {
// TODO Auto-generated method stub
System.out.println(event.getSource());
}
});
formPanel.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event) {
System.out.println("in");
System.out.println(event.getResults());
}
});
formPanel.submit();
GWT.xml
<servlet class="msp2.server.getType" path="/getType" />
web.xml
<servlet >
<servlet-name>getType</servlet-name>
<servlet-class>msp2.server.getType</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getType</servlet-name>
<url-pattern>/msp2_app/getType</url-pattern>
</servlet-mapping>发布于 2014-02-27 18:23:30
我知道这是一个古老的问题,但我也遇到了同样的问题,这些答案都不是解决方案。调用FormPanel.submit()之后,响应将在新选项卡中打开,并且不会调用onSubmitComplete()。
最终的解决方案是我的FormPanel没有添加到我的对话框submit()中。
这就是导致响应在新窗口中打开并且onSubmitComplete()未被调用的原因。我将它添加到我的DialogBox的面板中,之后它就可以正常工作了。
发布于 2012-10-26 18:23:08
来自the javadoc
后端服务器应响应内容类型为' text / HTML‘的文本,这意味着返回的文本将被视为超文本标记语言。如果服务器指定了任何其他内容类型,则在onFormSubmit事件中发送的结果在不同浏览器之间将是不可预测的,并且onSubmitComplete事件可能根本不会触发。
假设您说响应在另一个窗口中打开,并且您没有为FormPanel设置特定的目标,那么很可能是您的服务器不执行response.setContentType("text/html") (或使用;charset=参数执行类似操作)
发布于 2016-01-21 20:48:54
我挣扎着度过了
它还将弹出一个新窗口
我找到的所有答案都是关于将表单小部件添加到面板中,或者添加FormPanel本身而不是小部件,使动作链接成为绝对的,以及其他不起作用的东西。经过一个小时的尝试,真正对我起作用的解决方案是阅读javadoc
public FormPanel(String target) {...}@param target接收提交结果的名称,或指定替换当前页面的
null
只需将"_self“传递给FormPanel构造函数
FormPanel form = new FormPanel("_self");或者稍后通过.setTarget(...)进行设置方法。哇-它没有打开弹出窗口(这肯定会被Chrome阻止),也没有像预期的那样在方法中创建表单并提交它,甚至没有附加到DOM中。
https://stackoverflow.com/questions/13078770
复制相似问题