2009-06-19 14 views
6

He estado intentando esto por unos días sin suerte.No se puede obtener GWT FormPanel para que funcione correctamente

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

En el modo hospedado, no ocurre nada después de que se activa la alerta "Enviar a". En Chrome, el formulario se carga en una pestaña separada, pero el POST en sí está vacío. En Firefox y IE, una vez más, no sucede nada después de la alerta. ¿Algunas ideas?

He configurado un servlet en/designer que genera el encabezado y el cuerpo de la solicitud desde cualquier solicitud de página. Puedo presionar este servlet desde una página HTML simple y ver el resultado esperado. Desde GWT, nunca aparece ninguna solicitud (a excepción de Chrome, en el que aparece la solicitud, pero con un cuerpo vacío).

Respuesta

1

Su código es casi idéntico al ejemplo en el FormPanel API, por lo tanto, debo suponer que la lógica es correcta.

¿Hay un servlet en "/ designer"? La documentación para SubmitCompleteHandler indica que el evento onSubmitComplete solo se activa si el envío se realiza correctamente.

Aquí hay un hilo que contiene un código de ejemplo para escribir un servlet que maneja la forma mensaje: http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/77e68fcb9097debc

2

trate de mover form.setWidget(panel); a la parte inferior.

Además, asegúrese de agregar el formulario al panel del contenedor, es decir, add(form);, no el panel vertical.

0

Sé que este post es de 3 años de edad, pero en aras de cualquier googler como yo, que aterriza aquí, esto son las condiciones para el ser despedido OnSubmitCompleteEvent:

  1. Use la hay -arg constructor para compilar el formulario: FormPanel f = new FormPanel();. Como se menciona en Javadoc:

    Crea un nuevo FormPanel. Cuando se creó utilizando este constructor, se ser sometida a un marco flotante < > elemento oculto, y los resultados de la presentación disponible a través SubmitCompleteHandler {@ link}.

    Así que es el único que SÍ activa el envío del formulario completo evento cuando se realiza correctamente.

  2. Asegúrese de que la acción que se llama devuelve una respuesta con Content-Type: "text/html"

Una solución, si todavía necesita usar su externa NamedFrame, es mirar para LoadEvent en el marco. Se dispara cuando el marco comienza a cargarse, lo que significa que la respuesta del servidor llegó: ...

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

Hope it helps!

Cuestiones relacionadas