Personalmente, userei l'opzione n. 2. Mentre so che è molto possibile risolvere il problema usando EL e ottenere un po 'di riutilizzo su documenti xhtml usando funzioni o ui: params sembra davvero mancare della portabilità, manutenibilità e testabilità dell'implementazione del bean Java.
Se uno sviluppatore parla fluentemente EL e Java e possiede entrambi i bean xhtml e Java, non ha molto senso usare EL per fare QUALSIASI valutazione condizionale con una dimensione> 1.
Sembrano esserci troppi vantaggi nell'implementazione sul lato Java:
- Capacità di appoggiarsi al compilatore IDE +
- Usa costanti o enumerazioni (per "cane" e "corteccia"), è probabile che vengano utilizzati anche altrove nel codice per i confronti ... se il valore di String cambia è molto divertente dover sostituire manualmente ogni sua occorrenza in un base di codice
- Invece di dover accedere alla pagina in questione con i dati appropriati, posso esercitare la logica usando i test unitari
Uno degli argomenti principali che ho ascoltato (al di fuori di Stack) a favore dell'opzione 1 è:
"È molto più facile vedere quando viene eseguito il rendering di un componente se si mantiene questa logica nella vista."
Ho scoperto che questo potrebbe essere il caso di un'applicazione nella fase iniziale della sua vita in cui è più leggera e meno complicata. Tuttavia, applicando questa pratica su una scala più ampia e man mano che un'applicazione più piccola matura, può causare un ratto nido di condizionali e diventare un incubo da mantenere. Ecco un paio di esempi simili a quello che ho visto in natura:
<h:outputText value="grrr"
render="#{animal.type == 'dog' or animal.type == 'cat' or animal.type == 'horse'
or animal.type == 'pony' or animal.type == 'mule' or animal.type == 'lion'
or animal.type == 'tiger' or (animal.type == 'bird'
and animal.subType == 'macaw') or .... continue this for another line or two}"
/>
O il mio preferito, utilizzando più componenti con condizioni di rendering esclusive l'una dell'altra per rappresentare i diversi valori che potrebbero essere visualizzati:
<h:outputText value="grr" render="#{theMonstrosityFromPreviousExample} />
<h:outputText value="cry"
render="#{animal.type == 'human' and animal.subType == 'baby'}" />
<h:outputText value="yo"
render="#{animal.type == 'human' and animal.subType == 'teenager'}" />
<h:outputText value="hello"
render="#{animal.type == 'human' and animal.subType == 'adult'}"/>
È possibile visualizzare fino a 4 testi contemporaneamente? A prima vista non si può dire, sarà necessario un controllo di ogni condizione. Come nota a margine, mi rendo conto che questo esempio è anche un design scadente, in quanto potrebbero essere messi in pratica: scegli ... ma l'ho già visto prima.
Alla fine, questa è ancora teoricamente "vista" logica poiché determina ciò che viene effettivamente visualizzato, quindi c'è un argomento concettuale che dovrebbe vivere nel file xhtml. Il problema che ho riscontrato è che includere una logica come questa nel modello di visualizzazione può rendere il layout molto più difficile da capire a lungo termine e non ho ancora visto che questo metodo di risoluzione del problema comporta vantaggi reali rispetto all'uso di Java implementazione del bean.
barking animals
causa, chiamerei questo metodo, dal momento che esiste già. Se si tratta di una logica di visualizzazione utilizzata su più siti, è possibile creare una funzione el da esso.