2009-06-19 15 views
6

Lo sto provando da alcuni giorni senza fortuna.Impossibile riuscire a far funzionare correttamente GWT FormPanel

final FormPanel form = new FormPanel(new NamedFrame("test")); 
form.setAction("/designer"); 
form.setMethod(FormPanel.METHOD_POST); 
VerticalPanel panel = new VerticalPanel(); 
form.setWidget(panel); 

final TextBox tb = new TextBox(); 
tb.setName("style"); 
panel.add(tb); 
panel.add(new Button("Submit", new ClickHandler() { 
public void onClick(ClickEvent event) { 
    Window.alert("submitting to:" + form.getTarget()); 
    form.submit(); 
    } 
})); 
form.addSubmitCompleteHandler(new SubmitCompleteHandler() { 
public void onSubmitComplete(SubmitCompleteEvent event) { 
    Window.alert("complete"); 
    Window.alert(event.getResults()); 
} 
}); 

In modalità Hosted, non succede nulla dopo le "Invio a" fuochi di avviso. In Chrome, il modulo viene caricato in una scheda separata, ma il POST stesso è vuoto. In Firefox e IE, ancora una volta, non accade nulla dopo l'avviso. Qualche idea?

Ho impostato un servlet in/designer che restituisce l'intestazione e il corpo della richiesta da qualsiasi richiesta di pagina. Posso colpire questo servlet da una semplice pagina HTML e vedere l'output atteso. Da GWT, non viene mai visualizzata alcuna richiesta (tranne Chrome, in cui viene visualizzata la richiesta, ma con un corpo vuoto).

risposta

1

Il codice è quasi identico all'esempio sullo FormPanel API, pertanto è necessario presupporre che la logica sia corretta.

Esiste un servlet in "/ designer"? La documentazione per SubmitCompleteHandler indica che l'evento onSubmitComplete si attiva solo se l'invio ha esito positivo.

Ecco un filo che contiene alcuni esempi di codice per la scrittura di un servlet che gestisce il posto modulo: http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/77e68fcb9097debc

2

provare a spostare form.setWidget(panel); verso il basso.

Inoltre, assicurarsi di aggiungere il modulo al pannello del contenitore, ad esempio add(form);, non al pannello verticale.

0

So che questo post è di 3 anni, ma per il bene di qualsiasi googler come me che atterra qui, questo sono le condizioni per l'OnSubmitCompleteEvent di essere licenziato:

  1. Utilizzare il no -arg costruttore per compilare il modulo: FormPanel f = new FormPanel();. Come indicato nello Javadoc:

    Crea un nuovo FormPanel. Quando creati utilizzando questo costruttore, sarà essere sottoposta ad un <iframe> elemento nascosto, ed i risultati del la presentazione resi disponibili tramite {@link SubmitCompleteHandler}.

    Quindi è l'unico che fa scattare l'invio del modulo completo evento in caso di successo.

  2. Assicurarsi che l'azione di essere chiamato restituisce una risposta con Content-Type: "text/html"

Una soluzione, se hai ancora bisogno di utilizzare il esterna NamedFrame, è quello di guardare per il LoadEvent sul telaio. Viene generato quando viene avviato il caricamento del frame, il che significa che è arrivata la risposta dal server: ...

NamedFrame frame = new NamedFrame("test"); 
frame.addLoadHandler(new LoadHandler() 
{ 
    void onLoad(LoadEvent event) 
    { 
     //your code here 
    } 
}); 

Spero che sia d'aiuto!

Problemi correlati