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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top