首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GWT FormPanel -避免重定向

GWT FormPanel -避免重定向
EN

Stack Overflow用户
提问于 2012-12-18 06:29:46
回答 2查看 1.3K关注 0票数 0

我有一个FormPanel,它向服务器发送一个POST请求,其中包含:

代码语言:javascript
复制
form.setAction("http://servlet_address")

问题是,在触发submit()之后,表单面板将页面重定向到"http://servlet_address“(发送请求的位置),但这并不是所需的操作,因为servlet只是接收数据。如何避免这种重定向行为?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-18 07:56:25

它是一个标准的HTML表单行为。当您提交表单时,实际上是使用HTTP请求将表单数据发送到服务器。"Method“属性允许您定义表单数据的编码位置(URL或HTTP请求正文)。提交表单的结果(HTTP请求)将显示在您的浏览器中。

据我所知,您想要覆盖此行为。有几种方法可以做到这一点。所有这些都需要您手动处理表单数据并生成正确的请求。这意味着您不能提交表单。GWT与服务器通信有两种常见模式:

  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,这是一项复杂的任务。

票数 1
EN

Stack Overflow用户

发布于 2012-12-18 17:45:51

请看以下代码,它无需重定向即可正常工作(此代码可在onModuleLoad()方法中正常工作):

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

痛快地玩一下吧。

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

https://stackoverflow.com/questions/13923310

复制
相关文章

相似问题

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