Primefaces dépendante selectOneMenu et required=“true”
Dans mon application j'ai trois menu déroulant (p:selectOneMenu
), disons A, B, C. Parmi eux, deux sont dépendants, dire B et C. En changeant la valeur de B je suis le chargement dynamique de valeurs de C. il y a Également une zone de texte. La valeur de la textbox est générer par ajax lors de la modification de l'événement est de tirer de ces trois listes déroulantes.
Voici le xhtml:
<p:selectOneMenu id="customerMenu" value="#{adminController.activityDTO.customerId}" required="true" label="Customer Name" style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.customers}" var="customer" itemLabel="#{customer.customerName}" itemValue="#{customer.customerId}" />
<p:ajax listener="#{adminController.generateActivityName}" update="activityId" />
</p:selectOneMenu>
<p:selectOneMenu id="activityTypeMenu" value="#{adminController.activityDTO.activityParentType}" required="true" label="Activity Type"
style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.activityTypes}" var="activityType" itemLabel="#{activityType.parent}" itemValue="#{activityType.parent}" />
<p:ajax listener="#{adminController.updateDependentActivity}" update="activitySubType" />
</p:selectOneMenu>
<p:selectOneMenu id="activitySubTypeMenu" value="#{adminController.activityDTO.activitySubType}" required="true" label="Activity Sub Type"
style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.activitySubTypes}" var="activityType" itemLabel="#{activityType.name}" itemValue="#{activityType.id}" />
<p:ajax listener="#{adminController.generateActivityId}" update="activityId" />
</p:selectOneMenu>
<p:inputText id="activityId" autocomplete="off" readonly="true" value="#{adminController.activityDTO.activityId}"
label="#{adbBundle['admin.addActivityPanel.addActivityTable.activityId']}" required="true" />
La activityTypeMenu
et activitySubTypeMenu
sont dépendants, par la valeur sélectionnée de la activityTypeMenu
je suis le remplissage de la activitySubTypeMenu
.
Maintenant, les problèmes que je suis confronté est:
- Dire que j'ai sélectionner "Externe" et "Interne" dans
activityTypeMenu
et par défaut ", Sélectionnez l'Un". Si je choisis "Externe" de l'activityTypeMenu
laactivitySubTypeMenu
aura "Projet" et "Service". Mais alors, si je choisis l'option "Sélectionner" lesactivitySubTypeMenu
détient encore le déjà rempli dynamiquement des valeurs. C'est parce que lerequired="true"
attribut résistant au feu le backend de la méthode à partir de laquelle je suis le chargement de la dynamique de la valeur. - J'ai essayé de définir le
itemValue
de<f:selectItem itemLabel="Select One" itemValue="" />
à#{null}
et puis le backend méthode de tir sur la sélection de la "Sélectionnez une option" et je peux créer une liste vide àactivitySubTypes
et de cette façon, leactivitySubTypeMenu
se vider. Mais dans ce cas, larequired="true"
devient vide de sens. Je veux dire, j'ai aussi le bouton de sauvegarde et cliquer sur le bouton sans sélectionner l'option (c'est la sélection "Select") à partir deactivityTypeMenu
etactivitySubTypeMenu
de ne pas jeter deValidatorException
et les composants ne sont pas arriver de style par l'erreur de la classe css de Primefaces. - Aussi si je n'ai pas mis le
itemValue
de<f:selectItem itemLabel="Select One" itemValue="" />
à#{null}
puis-modification de la valeur sélectionnée pour l'option par défaut("Select") n'est pas l'effacement de l'activityId
p:inputText
. Si j'utilise#{null}
alors je peux obtenir le backend méthode de cuisson à partir de laquelle je peux définir la valeur de la zone de texte vide.
Comment ca je résoudre ce problème et d'obtenir le résultat désiré. Ce que je veux:
- Si l'option est réglée sur "Sélectionner" alors dépendante menu sera vide et que de la zone de texte.
- Je veux utiliser le
required="true"
attribut.
process="@this"
attribut dans p:ajax
tags? Ce qui évite la validation des autres composants de formulaire, parce que seule la composante que vous êtes en train de changer traitées par la JSF le cycle de vie. Si vous ne travaillez pas, le plus simple (mais pas le meilleur) moyen de le faire fonctionner en serait de se débarrasser de required="true"
attributs et de valider le formulaire entièrement quand il est envoyé. Bonne chance.Cependant, je pense que déjà
p:ajax
par défaut @this
.oui le
p:ajax
valeur par défaut est @this
Essayez d'utiliser la
noSelectionOption="true"
drapeau sur votre <f:selectItem/>
. Il est réservé indicateur qui provoque l'exécution d'évaluer votre sélection différemment.selon code.google.com/p/primefaces/issues/detail?id=4582 il a un bug avec
noSelectionOption
.
OriginalL'auteur Tapas Bose | 2013-01-26
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser EL dans le
required
attribut. Vous pouvez laisser l'expression souhaitée évaluertrue
seulement quand un particulier de soumettre le bouton est pressé, ou quand un élément particulier de la valeur est présentée (et donc par son IDENTIFIANT client présent dans la requête de paramètre de la carte#{param}
).Suivantes kickoff exemple devrait faire ce que vous avez besoin.
De cette façon, le 1er menu est uniquement requis lorsque la forme principale de soumettre le bouton est pressé (et donc pas lors de l'événement auditeurs sont licenciés) et le 2ème menu n'est requis lors de la 1ère menu a une valeur.
OriginalL'auteur BalusC