I valori JSF 2.0 non vengono inviati
-
29-10-2019 - |
Domanda
Sto lottando per far aggiornare il mio fagiolo con i nuovi valori di pagina. Ho due pulsanti di invio sulla mia pagina e alterco quale viene visualizzato in base a un valore booleano per la modalità in cui si trova la mia pagina. Quando la mia pagina è solo in aggiornamento (nessuna convalida) mostro il pulsante di invio che ha immediato = "true" . Quando la pagina è in modalità di processo (convalida) mostro il pulsante di invio che non ha immediato = "true". Il problema in cui mi sto incontrando è quando sono in modalità di aggiornamento (nessuna convalida) I valori nei campi di input non vengono impostati nel fagiolo. Tutto quello che voglio fare quando in questa modalità è salvare la pagina così com'è ed uscire. Non è necessaria alcuna convalida perché le informazioni su quella pagina non sono pronte per elaborare o "usare veramente" se vuoi. Detto questo, se ho la mia pagina in modalità processo (convalida), tutto funziona come previsto. I valori vengono inviati e salvati.
Non sto ancora pubblicando alcun codice in quanto non c'è niente di speciale in quello che sto cercando di fare. Ho semplicemente un valore vincolante che punta a semplice getter / setter. Il mio fagiolo è in @viewscope.
Ho provato a usare gli esempi di Balusc nel suo eccellente post sul blogspot: Debug-JSF-Lifecycle. Mettere immediati = "true" sui campi di input non ha alcun effetto quando si fa clic sul pulsante di invio con immediato = "true". Tutto ciò, però, il modo in cui capisco è immediato = "vero" sull'Uicommand è ciò che dice all'applicazione di saltare la convalida o meno. Mettilo sui campi di input fa semplicemente accadere la convalida. Mi sto perdendo qualcosa?
Qualche idea? Qualsiasi aiuto con questo è molto apprezzato!
Specifiche per app:
JSF 2.0.3
Tomcat 6.0.14
Soluzione
Il immediate="true"
non è intenzionato a disabilitare la convalida. È intenzionato a dare la priorità alla convalida o al salto del complesso dell'elaborazione dell'input. Guarda anche il riassunto in fondo all'articolo.
È necessario disabilitare la convalida mediante impostazione required="false"
, o <f:validator disabled="true">
. Ecco un esempio che presuppone che tu abbia un boolean process
Proprietà che rappresenta lo stato del modulo:
<h:inputText value="#{bean.value1}" required="#{bean.process}" />
<h:inputText value="#{bean.value2}" required="#{bean.process}">
<f:validator validatorId="someValidatorId" disabled="#{!bean.process}" />
</h:inputText>
...
In questo modo i campi non sono richiesti e non saranno validati quando process
valuta false
.