首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GWT formpanel不调用onSubmitComplete

GWT formpanel不调用onSubmitComplete
EN

Stack Overflow用户
提问于 2012-10-26 07:22:16
回答 6查看 3.2K关注 0票数 4

GWT:我可以在浏览器中调用servlet。当我通过formpanel调用它时,它可以调用onSubmit。但它不调用onSubmitComplete。它还会弹出一个新窗口,uri就是我的servlet。

代码语言:javascript
复制
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>
EN

回答 6

Stack Overflow用户

发布于 2014-02-27 18:23:30

我知道这是一个古老的问题,但我也遇到了同样的问题,这些答案都不是解决方案。调用FormPanel.submit()之后,响应将在新选项卡中打开,并且不会调用onSubmitComplete()

最终的解决方案是我的FormPanel没有添加到我的对话框submit()中。

这就是导致响应在新窗口中打开并且onSubmitComplete()未被调用的原因。我将它添加到我的DialogBox的面板中,之后它就可以正常工作了。

票数 4
EN

Stack Overflow用户

发布于 2012-10-26 18:23:08

来自the javadoc

后端服务器应响应内容类型为' text / HTML‘的文本,这意味着返回的文本将被视为超文本标记语言。如果服务器指定了任何其他内容类型,则在onFormSubmit事件中发送的结果在不同浏览器之间将是不可预测的,并且onSubmitComplete事件可能根本不会触发。

假设您说响应在另一个窗口中打开,并且您没有为FormPanel设置特定的目标,那么很可能是您的服务器不执行response.setContentType("text/html") (或使用;charset=参数执行类似操作)

票数 2
EN

Stack Overflow用户

发布于 2016-01-21 20:48:54

我挣扎着度过了

它还将弹出一个新窗口

我找到的所有答案都是关于将表单小部件添加到面板中,或者添加FormPanel本身而不是小部件,使动作链接成为绝对的,以及其他不起作用的东西。经过一个小时的尝试,真正对我起作用的解决方案是阅读javadoc

代码语言:javascript
复制
  public FormPanel(String target) {...}

@param target接收提交结果的名称,或指定替换当前页面的null

只需将"_self“传递给FormPanel构造函数

代码语言:javascript
复制
FormPanel form = new FormPanel("_self");

或者稍后通过.setTarget(...)进行设置方法。哇-它没有打开弹出窗口(这肯定会被Chrome阻止),也没有像预期的那样在方法中创建表单并提交它,甚至没有附加到DOM中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13078770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档