Comment conditionnellement rendre un f:selectItem tag?
Comment puis-je spécifier une condition de rendu pour une <f:selectItem>
tag.
J'ai besoin d'afficher <f:selectItem>
options selon un utilisateur spécifique de l'état.
Par exemple, je voulais quelque chose comme:
<f:selectItem itemLabel="Yes! I need a girlfriend!"
rendered="false(or some boolean condition)"
itemValue="o1"/>
Vous devez vous connecter pour publier un commentaire.
La
<f:selectItem>
ne pas l'appui de larendered
attribut. Le plus proche de votre pari est leitemDisabled
attribut qui affiche toujours l'élément, mais il ne peut pas être sélectionnée. C'est également en charge<f:selectItems>
.En cas de
<p:selectOneMenu>
ensuite, vous pouvez simplement ajouter un peu de CSS pour masquer les éléments désactivés.En cas de
<h:selectOneMenu>
vous êtes de plus en plus dépendante de savoir si le navigateur prend en charge la clandestinité les personnes handicapées options via CSS:Le côté serveur alternative est d'apporter un JSTL
<c:if>
autour de l'individu<f:selectItem>
à contitionally l'ajouter à la vue de cette façon (assurez-vous que vous êtes conscient de la façon dont JSTL travaille dans le JSF: JSTL dans JSF2 Facelets... logique?):Ou, vous pouvez simplement remplir dynamiquement un
List<SelectItem>
dans le backing bean, basé sur le calcul des conditions et le lier avec<f:selectItems>
.rendered
attribut n'est pas pris en charge parf:selectitem
donc j'ai soulevé cette question. Btwc:if
résolu le problème de bien. Merciui:repeat
,h:dataTable
, etc.panelStyleClass
etstyleClass
attributs sont totalement ignorés surp:selectOneMenu
dans PrimeFaces 6.1 de la communauté de l'édition, de sorte que le CSS ciblage indiqué ne fonctionne pas (ou plus, je suppose qu'il a travaillé à un certain stade précédemment).La solution que j'utilise est le réglage de la itemDisabled de l'attribut et de l'utilisation de ce CSS:
Mais il doit être fixé correctement dans le programme JSF.
.ui-selectonemenu-list-item a:disabled
mais cela ne fonctionne pas.Vous pouvez l'envelopper dans
ui:fragment
code:Alors l'élément sera affiché uniquement lorsque la condition booléenne est vraie.
f:selectItem
, il rend encore (apparaît comme une option sélectionnable), au moins dans unep:selectOneMenu
. Je ne pratique pas de commentaires-moins-vote sur stackoverflow, mais je pense que vous devriez double-vérifier cette affirmation.<c:if>
pour moi, c'est aussi ne fonctionne pas si cela dépend de la répétition variable d'un " composant (sur la première phase de construction, il fonctionne, mais à l'aide d'ajax et de la mise à jour de la collection de la for-each il échoue, montrant quelques éléments de deux fois et d'autres pas)c'est vraiment un gros problème dans le programme JSF. La désactivation n'est pas toujours une option, et de cette façon, beaucoup plus de code est nécessaire à la fève à l'adresse de ces "facile" des choses.
Construction de BalusC de réponse, il est possible de le faire sans un backing bean liste dans les versions plus récentes de JSF (je suis en utilisant JSF 2.2):
Je l'ai enveloppé dans un composant composite avec certains besoins spécifiques. La partie relative à cette question est à l'aide de
f:selectItems
avec une valeur de[]
ou[1]
. Lorsque votre situation rend l'utilisation[]
puis il va être omise, et quand il utilise[1]
il met tout dans un seul élément avec les valeurs que vous voulez.Pour moi le plus "propre" est en 2019, en utilisant JSF 2.3 et afin d'éviter de mélanger des
jsf/html
avecjstl
àitemDisabled="true"
etjsf/passthrough
pt:class="hidden"
.De cause vous avez besoin, puis le style CSS
Ceci a l'avantage qu'il peut y avoir toujours désactivé les éléments de votre liste.
J'ai résolu mon problème en faisant ce
rendered="false"
, mais pas pourrendered="true"
.