私は POST リクエストをサーバーに送信する FormPanel を持っています:
form.setAction("http://servlet_address")
問題は、submit() を起動した後、フォームパネルがページを "http://servlet_address" (リクエストが送信された場所) にリダイレクトすることですが、サーブレットはデータを受信するだけなので、このアクションは望ましくありません。このリダイレクト動作を回避するにはどうすればよいですか?
私は POST リクエストをサーバーに送信する FormPanel を持っています:
form.setAction("http://servlet_address")
問題は、submit() を起動した後、フォームパネルがページを "http://servlet_address" (リクエストが送信された場所) にリダイレクトすることですが、サーブレットはデータを受信するだけなので、このアクションは望ましくありません。このリダイレクト動作を回避するにはどうすればよいですか?
これは、標準の HTML フォームの動作です。フォームを送信すると、実際には HTTP リクエストを使用してフォーム データがサーバーに送信されます。「メソッド」属性を使用すると、フォーム データをエンコードする場所 (URL または HTTP 要求本文) を定義できます。フォーム送信(HTTPリクエスト)の結果がブラウザに表示されます。
私が理解しているように、この動作をオーバーライドしたいと考えています。それにはいくつかの方法があります。それらはすべて、フォームデータを手動で処理し、正しいリクエストを生成する必要があります。これは、フォームを送信できないことを意味します。GWT がサーバーと通信するための 2 つの一般的なパターンがあります。
Java Server バックエンドがあれば、どちらも簡単に使用できます。Java 以外の we-server にデータを送信する必要がある場合は、Request Factory しか使用できず、複雑な作業になります。
リダイレクトせずに正常に動作する次のコードを参照してください (このコードは 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);
よいひとときを。