Javascript envío del formulario para activar las transiciones Spring Web Flow con la integración de JSF

StackOverflow https://stackoverflow.com/questions/381434

Pregunta

I `m desarrollo de una aplicación utilizando Spring WebFlow 2, Facelets y JSF. Una de mis flujos tiene una página que debe desencadenar una forma de presentar en ciertos eventos. Para cada acción diferente, se debe presentar un punto de vista diferente. Por lo tanto, estoy tratando de activar el siguiente código JavaScript para realizar la petición:

function myFormSubmit( eventId ) {
   var formAction = document.myForm.action;
   document.myForm.action = formAction + '&_eventId=' + eventId;
   document.myForm.submit();
}

Desafortunadamente, esto no provoca la transición solicitada en mi flujo. La página no cambia. ¿Alguien sabe cómo hacer frente a esto?

Gracias, Alexandre

¿Fue útil?

Solución 3

Tengo la solución en el foro de Spring WebFlow. De acuerdo con Jeremy Grelle, la presentación del parámetro "_eventId" no provoca transiciones al integrar la primavera WebFlow a JSF. La solución que dio fue crear un PhaseListener JSF que crea una acción JSF cuando se envía un parámetro "_eventId".

El código PhaseListener puede verse en http: //forum.springsource. org / showthread.php? p = 219358 # post219358 .

Otros consejos

No sabe nada acerca de SringFaceletsSF, pero creo que probablemente controlador de eventos debe devolver true. De lo contrario, su navegador no enviar el formulario.

así:

function myFormSubmit( eventId ) {
   var formAction = document.myForm.action;
   document.myForm.action = formAction + '&_eventId=' + eventId;
   document.myForm.submit();
   return true;
}

En una inspección más cercana, hay un montón de problemas con este código.

document.myForm.action es una forma no habitual de obtener elementos. La mejor manera, cross-browser es:

document.getElementById('myFormId');

A ciegas añadiendo un símbolo de unión a la URL de acción del formulario asume que ya hay otro parámetro url, y por lo que ya es un signo de interrogación después de la URL. Si este no es el caso de los siguientes saltos de línea:

document.myForm.action = formAction + '&_eventId=' + eventId;

Por último, si se llama a esta función como un manejador onsubmit, creo que sólo debe devolver verdadero, y no llamar al método myForm.submit()

Modificación form.action es una forma muy pobre de añadir información a un envío del formulario. Sugiero poner un campo oculto en el formulario que se puede llenar con su eventID.

¿Está buscando para este parámetro en sus parametros GET o POST de sus params? no va a aparecer en el POST.

Actualización:

ok, por lo que para ilustrar, probar este ...

cambiar su función para hacer esto:

function myFormSubmit( eventId ) {
   var formAction = document.myForm.action;
   //document.myForm.action = formAction + '&_eventId=' + eventId;
     var myAction = document.createElement('input');
     myAction.setAttribute('name', '_eventId');
     myAction.setAttribute('type', 'hidden');
     myAction.setAttribute('value', eventId);
     document.myForm.appendChild(myAction);
   document.myForm.submit();
}

Prueba de ninguna (Non-IE) * navegador y ver si funciona. Si es así, el GET vs. parámetro POST es el problema.

* non-IE: trying to set the name or type in IE will FAIL, thus don't test there.

¿Hay alguna razón no se puede utilizar la primavera Caras componentes que vienen con SWF? Hay una etiqueta ajaxEvent puede utilizar para envolver elementos. Se activa en los eventos de JavaScript dadas (onclick, onchange) e invoca una acción de su elección.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top