Come usare nella pagina JSF? Forma singola? Più forms? Forme annidate?

Sto utilizzando la Tecnologia di modellazione Facelet per impaginare la mia pagina in un’app JSF 2 su cui sto lavorando.

Nel mio header.xhtml, primefaces richiede che la barra dei menu sia racchiusa in h: form.

 

Menu Items here!

Quindi, nelle pagine dei miei contenuti, avrò un’altra h: form o più.

Funzionerà solo se metto la h: form nel mio template.xhtml?

   
Content

In realtà sto pensando a un caso d’uso in cui ho bisogno di più h: form in una pagina.

Grazie

È ansible utilizzare in modo sicuro più moduli in una pagina JSF. Non è diverso da quando si utilizza HTML semplice.

L’annidamento degli elementi

non è valido in HTML . Dal momento che JSF genera solo un mucchio di HTML, non è diverso in JSF. Anche la nidificazione di è valida in JSF.

  ...   ...  ...  

Il comportamento del browser relativo all’invio di un modulo nidificato non è specificato. Potrebbe o non potrebbe funzionare come ti aspetti. Ad esempio, può semplicemente aggiornare la pagina senza richiamare il metodo di azione del bean. Anche se si sposta il modulo nidificato (o un componente che lo contiene) al di fuori del modulo padre con dom manipulation (o usando ad esempio PrimeFaces appendTo="@(body)" ), non funzionerà e ci dovrebbe essere nessun modulo annidato al momento del caricamento della pagina.

Per quanto riguarda quali forms è necessario mantenere, avere un singolo “dio” è in realtà una pratica scadente. Quindi, è meglio rimuovere la esterna dal template principale e lasciare che le sezioni header , sidebar , content etc definiscano ciascuna il proprio . Più moduli paralleli sono validi.

  ...    ...  

Ogni modulo deve avere una chiara responsabilità. Ad esempio un modulo di accesso, un modulo di ricerca, il modulo principale, il modulo di dialogo, ecc. Non si desidera elaborare inutilmente tutti gli altri moduli / input, quando si invia un determinato modulo.

Nota quindi che quando invii un determinato modulo, NON vengono elaborati altri moduli. Quindi, se intendi elaborare un input di un altro modulo, hai un problema di progettazione. O inseriscilo nella stessa forma o inserisci alcuni brutti JavaScript per copiare le informazioni necessarie in un campo nascosto del modulo contenente il pulsante di invio.

All’interno di un certo modulo, tuttavia, è ansible utilizzare ajax per limitare l’elaborazione degli input a un sottoinsieme più piccolo. Ad esempio elaborerà (submit / convert / validate / invoke) solo il componente corrente e non altri all’interno della stessa forma. Questo di solito deve essere utilizzato in casi d’uso in cui altri input all’interno della stessa forma devono essere riempiti / renderizzati / triggersti ​​dynamicmente, ad esempio menu a discesa dipendenti, elenchi di completamento automatico, tabelle di selezione, ecc.

Guarda anche:

  • commandButton / commandLink / ajax action / metodo listener non richiamato o valore di input non impostato / aggiornato – punto 2
  • Che cosa dovrebbe fare ? POST solo il modulo allegato
  • Comprensione processo / aggiornamento e JSF f: ajax esegue / rende attributi
  • l’azione non funziona all’interno di

Sono stato confuso da questo problema per un po ‘. Invece di una serie di forms indipendenti, mi sono convertito in un modello, cioè, piuttosto che fare una chiamata a un xhtml con i moduli elencati, solitamente come ui: include, faccio una chiamata a quelli precedentemente ui: pagine xhtml incluse che ui: contenuto catturato in un modello principale.