Soumission de formulaire JavaScript pour activer les transitions de flux Web de printemps avec l'intégration JSF

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

Question

Je développe une application à l'aide de Spring WebFlow 2, Facelets et JSF. Un de mes flux a une page qui doit déclencher un formulaire soumettre à certains événements. Pour chaque action différente, une vue différente doit être présentée. Donc, j'essaie d'activer le code JavaScript suivant pour effectuer la soumission:

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

Malheureusement, cela ne déclenche pas la transition demandée dans mon flux. La page ne change pas. Quelqu'un sait-il comment gérer cela?

Merci, Alexandre

Était-ce utile?

La solution 3

J'ai la solution dans le Forum Spring Webflow. Selon Jeremy Grelle, la soumission du paramètre "_EventID" ne déclenche pas de transitions lors de l'intégration de Spring WebFlow à JSF. La solution qu'il a donnée a été de créer un phaseListener JSF qui crée une action JSF lorsqu'un paramètre "_EventID" est envoyé.

Le code phaseListener peut être vu à http://forum.springsource.org/showthread.php?p=219358#post219358.

Autres conseils

Je ne sais rien sur sringfaceletssf, mais je pense que ce gestionnaire d'événements devrait probablement revenir true. Sinon, votre navigateur ne soumetra pas le formulaire.

alors:

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

En y regardant de plus près, il y a un tas de problèmes avec ce code.

Document.Myform.Action est un moyen non standard d'obtenir des éléments. La meilleure façon de croix est:

document.getElementById('myFormId');

Ajouter aveuglément un ampère et l'action de forme URL suppose qu'il y a déjà un autre paramètre URL, et donc il y a déjà un point d'interrogation après l'URL. Si ce n'est pas le cas, la ligne suivante se casse:

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

Dernièrement, si Vous appelez cette fonction comme un gestionnaire onSubmit, je crois que vous devriez simplement revenir vrai et ne pas appeler le myForm.submit() méthode

Modification du formulaire. L'action est une très mauvaise façon d'ajouter des informations à une soumission de formulaire. Je suggère de mettre une entrée cachée dans votre formulaire que vous pouvez remplir avec votre eventID.

Êtes-vous à la recherche de ce paramètre dans vos paramètres de Get ou vos paramètres de publication? Il n'apparaît pas dans le post.

Mise à jour:

Ok, donc pour illustrer, essayez ceci ...

Changez votre fonction pour ce faire:

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

Testez dans n'importe quel navigateur (non IE) * et voyez si cela fonctionne. Si c'est le cas, le GET contre Post Param est le problème.

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

Y a-t-il une raison pour laquelle vous ne pouvez pas utiliser les composants des faces de ressort accompagnées de SWF? Il y a une balise AjaxEvent que vous pouvez utiliser pour envelopper des éléments. Il s'active sur des événements JavaScript donnés (OnClick, Onchange) et invoque une action de votre choix.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top