rich:listShuttle et problème de validation
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 :
Code:
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> |
La méthode handleProfileSelection du bean pmb est la suivante :
Code:
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()));
}
}
} |
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).
Mon listShuttle se définit comme ça :
Code:
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> |
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 :
profileForm:permissionId: Validation Error: Value my.package.MySelectItem@xxxx is not valid
Pour information le code du converter :
Code:
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();
} |
Franchement, je ne comprends pas d'où vient l'erreur...
Une idée ?
ps: La version de RichFaces utilisée est la 3.1.4.GA