Domanda

In JSF, è possibile risolvere il seguente scenario di validazione / aggiornamento usando il framework di validazione di JSF (ovvero validatori, immediato, richiesto, ecc.)?

+-- Form ----------------------------------------------------+
|                                                            |
| Field A: |____________|v|                                  |
| Field B: |____________|v|                                  |
| Field C: |____________|v| Button: [Update C using A and B] |
| Field D: |____________|v| Button: [Update D using B and C] |
|                                                            |
| More Fields: ...                                           |
|                                                            |
| Button : [Submit All]                                      |
+------------------------------------------------------------+

Dove tutti i campi sono a discesa e dove la pressione del pulsante [Aggiorna C] causerebbe solo la convalida di A, B e C, ma non il resto, la pressione del pulsante [Aggiorna D] provocherebbe solo i campi B, C e D a convalidare e premere il pulsante [Invia tutto] per convalidare tutti i campi.

È stato utile?

Soluzione

Tecnicamente sì, è possibile farlo con validatori / immediati. Tuttavia, non sarebbe particolarmente semplice.

Se aggiungi validatori, la logica in [Aggiorna C usando A e B] verrà eseguita solo se tutti i validatori passano o se il suo attributo immediato è stato impostato su true. Se l'attributo immediato è stato impostato su true, la logica del pulsante non può leggere i valori dei componenti inviati utilizzando getValue o qualsiasi oggetto a cui è associato il componente; deve utilizzare getSubmittedValue (una cattiva idea).

Un approccio migliore sarebbe quello di eseguire la logica di convalida in un bean gestito a cui sono associati tutti i controlli. È possibile inserire la logica di convalida in tutti i metodi a cui sono associati i pulsanti. Utilizzare il pulsante [Invia tutto] per salvare i dati convalidati nel database / archivio di persistenza / qualunque cosa.

Altri suggerimenti

Di solito stavo facendo cose simili con Ajax, dove avrei inviato parti che mi interessavano al server, convalidando / elaborando lì e restituendo i risultati alla pagina. D'altra parte, è un bypass completo di JSF e dei suoi meccanismi di validazione, quindi immagino che non sia davvero la soluzione più intelligente / ottimale ...

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