Personnellement, j'utiliserais l'option n ° 2. Bien que je sache qu'il est très possible de résoudre le problème en utilisant EL et de gagner un peu de réutilisation dans les documents xhtml en utilisant des fonctions ou ui: params, il semble vraiment manquer de portabilité, de maintenabilité et de testabilité de l'implémentation du bean Java.
Si un développeur parle couramment EL et Java et possède à la fois les beans xhtml et Java, il ne semble pas très logique d'utiliser EL pour effectuer N'IMPORTE QUELLE évaluation conditionnelle avec une taille> 1.
Il semble simplement qu'il y ait trop d'avantages à implémenter du côté Java:
- Possibilité de s'appuyer sur le compilateur IDE +
- Utilisez des constantes ou des énumérations (pour "chien" et "aboiement"), il y a de fortes chances qu'elles soient utilisées ailleurs dans le code pour des comparaisons également ... si la valeur de la chaîne change, c'est vraiment amusant de devoir en remplacer manuellement chaque occurrence à travers un base de code
- Au lieu d'avoir à naviguer vers la page en question avec les données appropriées, je peux exercer la logique à l'aide de tests unitaires
L'un des principaux arguments que j'ai entendu (en dehors de Stack) en faveur de l'option 1 est:
"Il est beaucoup plus facile de voir quand un composant effectue un rendu si vous conservez cette logique dans la vue."
J'ai trouvé que cela pourrait être le cas pour une application au stade initial de sa vie où elle est plus légère et moins compliquée. Cependant, l'application de cette pratique à plus grande échelle et à mesure qu'une application plus petite arrive à maturité, elle peut provoquer un nid de conditionnels chez le rat et devenir un cauchemar à maintenir. Voici quelques exemples similaires à ce que j'ai vu dans la nature:
<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}"
/>
Ou mon préféré, en utilisant plusieurs composants avec des conditions de rendu exclusives les unes des autres pour représenter les différentes valeurs qui pourraient être affichées:
<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'}"/>
Peut-on afficher jusqu'à 4 textes à la fois? À première vue, vous ne pouvez pas le dire, une vérification de chaque condition sera nécessaire. En remarque, je me rends compte que cet exemple est également de mauvaise conception, car ceux-ci pourraient être mis en ac: choisissez ... mais je l'ai déjà vu auparavant.
À la fin de la journée, cela est toujours théoriquement une logique de «vue» car elle détermine ce qui est réellement affiché, il y a donc un argument conceptuel selon lequel elle devrait vivre dans le xhtml. Le problème que j'ai trouvé est que l'inclusion d'une logique comme celle-ci dans le modèle de vue peut rendre la disposition beaucoup plus difficile à comprendre à long terme et je n'ai pas encore vu que cette méthode de résolution du problème présente un réel avantage par rapport à l'utilisation de Java implémentation du bean.
barking animals
car j'appellerais cette méthode, car elle existe déjà. Si c'est une logique de vue que vous utilisez sur plusieurs sites, vous pouvez créer une fonction el à partir de celle-ci.