2010-09-11 32 views
1

我想使用POST請求離開我的GWT應用程序。如果它是一個GET,我可以使用Window.Location,如果我不需要它是動態的,我可以硬編碼一個表單並提交它。 FormPanel似乎是創建和提交表單的答案,但它是異步執行的,我希望用戶的瀏覽器遵循表單提交,遠離我的應用程序導航,而不是僅顯示結果。GWT,使用POST請求導航到頁面

任何人都知道如何在Google Web Toolkit中做到這一點?

回答

4

好的,明白了!

傳遞null到FormPanel中的String構造有效地寫着「替換當前頁面」:

new FormPanel((String)null); 

本次論壇主題是有用的: http://www.coderanch.com/t/120264/GWT/GWT-HTTP-post-requests

+0

如果您沒有在代碼中構建UI,那麼您可以使用轉換技巧將目標設置爲null。 請參閱[此SO帖子](http://stackoverflow.com/questions/11890068/how-post-entire-page-in-gwt-form-panel) – kierans 2012-09-05 01:37:21

0

雖然我自己做了這個,但我認爲你應該可以創建一個FormPanel,然後將其元素轉換爲FormElement並在FormElement上調用submit。

FormPanel formPanel = new ... 
FormElement form = FormElement.as(formPanel.getElement()); 
form.submit(); 
0

我認爲你的FormElement的想法會工作,但不幸的是它仍然發送異步。以下都成功發送請求並獲得響應,但唉,該頁面不會更改。

_tmp.addClickHandler(new ClickHandler() 
{ 
    @Override 
    public void onClick(ClickEvent event_) 
    { 
     doPost(); 
    } 

    public native void doPost() /*-{ 
     var form = document.createElement("form"); 
     form.setAttribute("method", "GET"); 
     form.setAttribute("action", "http://www.google.com"); 
     document.body.appendChild(form);  
     form.submit(); 
    }-*/; 
}); 

public void onClick(ClickEvent event_) 
{ 
    final FormPanel form = new FormPanel(); 
    form.setAction("http://www.google.com"); 
    form.setMethod(FormPanel.METHOD_GET); 
    RootPanel.get("main").add(form); 
    FormElement formElement = FormElement.as(form.getElement()); 
    formElement.submit(); 
} 

我意識到,我已經使用GET方法在我的例子以上。這純粹是因爲Google只接受GET。我在我自己的servlet上嘗試POST的結果相同。

一定有辦法做到這一點。

+0

爲什麼這不起作用,可能是因爲GWT在iframe中運行它的javascript,所以你將表單添加到iframe中,而不是$ doc.body.appendChild(form); – pathed 2010-09-11 21:09:54

+0

這工作如果你添加form.setAttribute(「目標」,「_top」); – MTilsted 2014-08-13 18:23:25