Bonjour,
Je dois avouer que je suis un peu bloqué sur un problème de validation, et je ne comprends pas pourquoi...
Dans un formulaire (h:form), j'ai une combobox qui me permet de choisir un profile. Voici son code :
La méthode handleProfileSelection du bean pmb est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <h:selectOneMenu value="#{pmb.profileId}"> <f:selectItems value="#{pmb.profileList}" /> <a4j:support event="onchange" reRender="permissions" actionListener="#{pmb.handleProfileSelection}" /> </h:selectOneMenu>
Rien de méchant, elle met à jour une liste contenant des éléments MySelectItem, une classe qui étend SelectItem en redéfinissant equals et hashCode (à cause de ça).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public void handleProfileSelection(ActionEvent actionEvent) { List<Permission> permissionList = habilitationService.findPermissionsByProfileId(getProfileId()); assignedPermissions = new ArrayList<MySelectItem>(); if (!permissionList.isEmpty()) { for (Permission p : permissionList) { assignedPermissions.add(new MySelectItem(new Integer(p.getPermissionId()), p.getPermissionLabel())); } } }
Mon listShuttle se définit comme ça :
Le problème c'est que quand je choisis une valeur dans mon combobox, tout se passe bien, et le listShuttle s'affiche bien. Mais si je change à nouveau une valeur dans le combobox, j'ai une erreur de validation, à savoir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <a4j:outputPanel id="permissions"> <rich:listShuttle fastOrderControlsVisible="false" id="permissionId" converter="selectItemListShuttleConverter" copyAllControlLabel="Add all" copyControlLabel="Add" removeAllControlLabel="Remove all" removeControlLabel="Remove" orderControlsVisible="false" var="item" sourceCaptionLabel="Available permissions" targetCaptionLabel="Assigned permissions" sourceValue="#{pmb.selectedPermissions}" targetValue="#{pmb.assignedPermissions}"> <rich:column> <h:outputText value="#{item.label}"/> </rich:column> </rich:listShuttle> </a4j:outputPanel>
profileForm:permissionId: Validation Error: Value my.package.MySelectItem@xxxx is not valid
Pour information le code du converter :
Franchement, je ne comprends pas d'où vient l'erreur...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public Object getAsObject(FacesContext fc, UIComponent compo, String val) { String[] str = val.split(":"); return new MySelectItem(str[0], str[1]); } public String getAsString(FacesContext fc, UIComponent compo, Object val) { MySelectItem data = (MySelectItem) val; return data.getValue() + ":" + data.getLabel(); }
Une idée ?
ps: La version de RichFaces utilisée est la 3.1.4.GA
Partager