0

私は POST リクエストをサーバーに送信する FormPanel を持っています:

form.setAction("http://servlet_address")

問題は、submit() を起動した後、フォームパネルがページを "http://servlet_address" (リクエストが送信された場所) にリダイレクトすることですが、サーブレットはデータを受信するだけなので、このアクションは望ましくありません。このリダイレクト動作を回避するにはどうすればよいですか?

4

2 に答える 2

1

これは、標準の HTML フォームの動作です。フォームを送信すると、実際には HTTP リクエストを使用してフォーム データがサーバーに送信されます。「メソッド」属性を使用すると、フォーム データをエンコードする場所 (URL または HTTP 要求本文) を定義できます。フォーム送信(HTTPリクエスト)の結果がブラウザに表示されます。

私が理解しているように、この動作をオーバーライドしたいと考えています。それにはいくつかの方法があります。それらはすべて、フォームデータを手動で処理し、正しいリクエストを生成する必要があります。これは、フォームを送信できないことを意味します。GWT がサーバーと通信するための 2 つの一般的なパターンがあります。

  1. GWT-RPC ( https://developers.google.com/web-toolkit/doc/latest/tutorial/RPC )
  2. リクエスト ファクトリ ( https://developers.google.com/web-toolkit/doc/latest/DevGuideRequestFactory )

Java Server バックエンドがあれば、どちらも簡単に使用できます。Java 以外の we-server にデータを送信する必要がある場合は、Request Factory しか使用できず、複雑な作業になります。

于 2012-12-17T23:56:25.217 に答える
-1

リダイレクトせずに正常に動作する次のコードを参照してください (このコードは onModuleLoad() メソッドで正しく動作します)。

final FormPanel formPanel = new FormPanel();
formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
formPanel.setMethod(FormPanel.METHOD_POST);

VerticalPanel verticalPanel = new VerticalPanel();
verticalPanel.add(new Label("Username"));
TextBox userid = new TextBox();
userid.setName("username");
verticalPanel.add(userid);

verticalPanel.add(new Label("Password"));
PasswordTextBox passwd = new PasswordTextBox();
passwd.setName("pass");
verticalPanel.add(passwd);

verticalPanel.add(new Button("Submit", new ClickHandler() {

    @Override
        public void onClick(ClickEvent event) {
    formPanel.submit();
    }
}));

formPanel.add(verticalPanel);

formPanel.setAction("submit"); // e.g. servlet URL

// Add an event handler to the form.
formPanel.addSubmitHandler(new FormPanel.SubmitHandler() {
    public void onSubmit(SubmitEvent event) {
    // This event is fired just before the form is submitted. We can
    // take
    }
});
formPanel.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
    public void onSubmitComplete(SubmitCompleteEvent event) {
    // When the form submission is successfully completed,
    // this event is fired.
    Window.alert(event.getResults());
    }
});

RootPanel.get().add(formPanel);

よいひとときを。

于 2012-12-18T09:45:51.217 に答える