Javascript invio del modulo per attivare le transizioni Spring Web Flow con integrazione JSF
-
23-08-2019 - |
Domanda
I `m in via di sviluppo di un'applicazione mediante Primavera WebFlow 2, Facelets e JSF. Uno dei miei flussi ha una pagina che deve innescare una forma presentare a determinati eventi. Per ogni azione diversa, una diversa visione deve essere presentata. Quindi, sto cercando di attivare il seguente codice javascript per eseguire la presentazione:
function myFormSubmit( eventId ) {
var formAction = document.myForm.action;
document.myForm.action = formAction + '&_eventId=' + eventId;
document.myForm.submit();
}
Purtroppo, questo non fa scattare il passaggio richiesto nel mio flusso. La pagina non cambia. C'è qualcuno che sa come trattare con questo?
Grazie, Alexandre
Soluzione 3
Ho la soluzione nel forum primavera WebFlow. Secondo Jeremy Grelle, la presentazione di parametro "_eventId" non attiva le transizioni durante l'integrazione di primavera WebFlow a JSF. La soluzione ha dato è stato quello di creare un PhaseListener JSF che crea un'azione JSF quando un parametro "_eventId" viene inviato.
Il codice PhaseListener può essere visto a http: //forum.springsource. org / showthread.php? p = 219.358 # post219358 .
Altri suggerimenti
Non so nulla di SringFaceletsSF, ma penso che gestore di eventi dovrebbe probabilmente tornare true
. In caso contrario, il tuo browser non inviare il modulo.
così:
function myFormSubmit( eventId ) {
var formAction = document.myForm.action;
document.myForm.action = formAction + '&_eventId=' + eventId;
document.myForm.submit();
return true;
}
A ben vedere, ci sono un sacco di problemi con questo codice.
document.myForm.action è un modo non-standard di ottenere elementi. Il modo migliore, cross-browser è:
document.getElementById('myFormId');
Alla cieca aggiungendo una e commerciale all'URL form action presuppone che vi sia già un altro parametro url, e quindi v'è già un punto interrogativo dopo l'URL. Se questo non è il caso la seguente interruzioni di riga:
document.myForm.action = formAction + '&_eventId=' + eventId;
Infine, se che si sta chiamando questa funzione come un gestore onSubmit, credo che si dovrebbe solo tornare vero, e non chiamare il metodo myForm.submit()
Modifica form.action è un modo molto povera di aggiungere informazioni a un invio di un modulo. Suggerisco di mettere un input nascosto nel modulo che è possibile popolare con il vostro eventID.
Sei alla ricerca di questo parametro nei tuoi params GET o POST tuoi params? non sarà visualizzato nel post.
Aggiornamento:
ok, quindi per illustrare, provare questo ...
modificare la funzione per fare questo:
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();
}
Prova a qualsiasi (non-IE) * browser e vedere se funziona. Se è così, il GET vs POST param è il problema.
* non-IE: trying to set the name or type in IE will FAIL, thus don't test there.
C'è qualche motivo non è possibile utilizzare la primavera Faces componenti che vengono con SWF? C'è un tag ajaxEvent è possibile utilizzare per avvolgere elementi. Si attiva su determinati eventi JavaScript (onclick, OnChange) e invoca un'azione di vostra scelta.