La meilleure façon d'ajouter une option "rien de sélectionné" à un menu SelecTone dans JSF

je me demandais quelle serait la meilleure ou la plus facile façon de permettre à un utilisateur de ne rien sélectionner dans un menu de sélection.

Mon exemple: j'ai une liste d'utilisateurs et de l'administrateur doit être en mesure de filtrer la liste des utilisateurs par certains critères. Ces critères, comme l'usertype (employé, client,...) peut être choisi par selectOneMenus, comme ceci:

<h:selectOneMenu value="#{myBean.selectedUsertype}" converter="#{usertypeConverter}">
<f:selectItems value={myBean.usertypes}" />
</h:selectOneMenu>

lorsque le sélectionneur correspondant est soutenu par un liste des POJOs en utilisant un convertisseur, Comment puis-je ajouter un élément à la liste indiquant que l'utilisateur n'a pas choisi un élément spécifique? Actuellement, j'ai un objet UserType factice affichant l'étiquette "---", mais cela cause plusieurs problèmes dans d'autres domaines de mon application et je ne pense pas que ce soit la meilleure solution.

38
demandé sur BalusC 2012-07-06 14:00:25

3 réponses

vient de définir explicitement la valeur select item à null .

<h:selectOneMenu value="#{bean.selectedItem}">
    <f:selectItem itemValue="#{null}" itemLabel="--select--" />
    <f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>

Non, une chaîne vide comme itemValue="" n'est pas suffisant. Il faut vraiment que ce soit null . Sinon, vous rencontrez des problèmes comme décrit dans cette Q & R: en utilisant un "s'il vous plaît sélectionner" f:selectItem avec valeur nulle/vide à l'intérieur d'un p:selectOneMenu .

si l'article se trouve être required="true" et vous utilisez JSF 2.x, alors vous pouvez ajouter noSelectionOption="true" à l'élément select. Si vous mettez aussi hideNoSelectionOption="true" sur le composant de sélection, alors il masquera l'option vide dans la liste une fois que l'utilisateur final sélectionnera un élément différent, rendant ainsi impossible la re-sélection de l'option vide.

<h:selectOneMenu value="#{bean.selectedItem}" hideNoSelectionOption="true">
    <f:selectItem itemValue="#{null}" itemLabel="--select--" noSelectionOption="true" />
    <f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
88
répondu BalusC 2017-05-23 12:09:59

Ajouter un seul selectItem avec valeur nulle;

<h:selectOneMenu value="#{bean.question}" required="true" requiredMessage="Please select a question">
    <f:selectItem itemValue="#{null}" itemLabel="Select" />
    <f:selectItems value="#{bean.questions}" />
</h:selectOneMenu>
9
répondu rad 2012-07-09 14:47:07

nous pouvons en primefaces (quand nous devons utiliser <p:selectOneMenu ... pour une raison comme <p:ajax ..) ajouter l'article vide suivant:

<f:selectItem itemValue="#{null}" itemLabel="--select--"  itemDisabled="#{Mybean.value ne null}" />

Note: dans ce cas, nous n'avons pas besoin des deux étiquettes suivantes:

hideNoSelectionOption="true"

et

noSelectionOption="true"
2
répondu A. Qaoud 2017-07-19 11:55:48