我有一个 FormPanel,它向服务器发送一个 POST 请求:
form.setAction("http://servlet_address")
问题是,在触发 submit() 后,表单面板将页面重定向到“http://servlet_address”(发送请求的位置),但此操作是不需要的,因为 servlet 只是接收数据。如何避免这种重定向行为?
我有一个 FormPanel,它向服务器发送一个 POST 请求:
form.setAction("http://servlet_address")
问题是,在触发 submit() 后,表单面板将页面重定向到“http://servlet_address”(发送请求的位置),但此操作是不需要的,因为 servlet 只是接收数据。如何避免这种重定向行为?
这是一种标准的 HTML 表单行为。当您提交表单时,您实际上使用 HTTP 请求将表单数据发送到服务器。“方法”属性允许您定义对表单数据(URL 或 HTTP 请求正文)进行编码的位置。并且表单提交(HTTP 请求)的结果将显示在您的浏览器中。
据我了解,您想覆盖此行为。有几种方法可以做到这一点。所有这些都需要您手动处理表单数据并生成正确的请求。这意味着您不能提交表单。GWT 与服务器通信有两种常见的模式:
如果您有 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);
玩得开心。