4

GWT: ブラウザでサーブレットを呼び出すことができます。formpanel で呼び出すと、onSubmit を呼び出すことができます。ただし、onSubmitComplete は呼び出されません。また、新しいウィンドウがポップアップします。URI は私のサーブレットです。

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>
4

6 に答える 6

4

これは古い質問であることは知っていますが、私はちょうど同じ問題を抱えていて、これらの答えのどれも解決策ではありませんでした. を呼び出した後FormPanel.submit()、応答が新しいタブで開き、onSubmitComplete()呼び出されませんでした。

解決策は、FormPanel呼び出されたダイアログに my が追加されなかったことsubmit()です。Hiddenフォームは、押されたページ上のボタンに応じて値が設定されるフィールドで完全に構成されているFormPanelため、ユーザーが選択可能な値を持つフォーム ウィジェットは実際には含まれていないため、どこでもウィンドウ。

これが原因で、応答が新しいウィンドウで開かれ、onSubmitComplete()呼び出されませんでした。私はそれを自分のパネルに追加しましたが、DialogBoxその後は正常に機能しました。

于 2014-02-27T10:23:29.707 に答える
2

javadocから:

バックエンド サーバーは「text/html」のコンテンツ タイプで応答することが期待されます。つまり、返されるテキストは HTML として扱われます。サーバーによってその他のコンテンツ タイプが指定されている場合、onFormSubmit イベントで送信される結果の HTML はブラウザー間で予測できず、onSubmitComplete イベントはまったく発生しない可能性があります。

応答が別のウィンドウで開き、特定のターゲットを に設定しなかったと言うと、FormPanelおそらくサーバーがそうではないresponse.setContentType("text/html")(または;charset=パラメーターで同様の)場合です。

于 2012-10-26T10:23:07.990 に答える
1

苦労して乗り越えてきた

また、新しいウィンドウがポップアップします

私が見つけたすべての答えは、フォーム ウィジェットをパネルに追加するか、ウィジェットの代わりに FormPanel 自体を追加して、アクション リンクを絶対的なものにし、他のものをゲルプしなかったことに関するものでした。1時間試行した後、本当にうまくいった解決策は、javadocを読むことでした

  public FormPanel(String target) {...}

@param は <iframe> の名前をターゲットにして、送信の結果を受け取るかnull、現在のページを置き換えるように指定します

「_self」を FormPanel コンストラクターに渡すだけです。

FormPanel form = new FormPanel("_self");

または、後で .setTarget(...) メソッドを介して設定します。おっと-ポップアップは開きません(Chromeによって確実にブロックされます)また、メソッドでフォームを作成し、DOMに追加することなく送信することも期待どおりに機能します。

于 2016-01-21T12:48:54.117 に答える
0

フォームの送信が正常に完了すると、onSubmitComplete が呼び出されます。フォームの送信にエラーがないことを確認してください。

試しているコードを投稿してください。他の人が問題を理解するのに役立ちます。

ここで提供されている FormPanel の使用例を試すこともできます

于 2012-10-26T03:52:01.810 に答える