2012-12-17 62 views
0

我有发送POST请求到服务器FormPanel中:GWT FormPanel中 - 避免重定向

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

的问题是,发射提交()之后,FormPanel中重定向页面的“http:// servlet_address“(发送请求的地方),但是这个动作并不需要,因为servlet只是接收数据。我怎样才能避免这种重定向行为?

+1

您是否添加了form.setMethod(FormPanel.METHOD_POST); ? –

回答

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服务器使用后端。如果您需要将数据提交给非Java We-server,那么只能使用Request Factory,这是一项复杂的任务。

-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); 

有一个很好的时间。