2010-10-08 19 views
2

J'ai un modèle de données dans lequel j'ai un Item qui peut appartenir à un ou plusieurs Categories. J'essaie d'afficher un <rich:listShuttle /> permettant à l'utilisateur de choisir lequel Categories le Item devrait appartenir. J'utilise RichFaces et Seam 2.2.x, et je n'ai rencontré aucun problème lors de la définition initiale des valeurs. Ma source est une liste des Categories définis, alors que ma cible est l'attribut Item.values(). Tout fonctionne correctement lors de la configuration du Categories pour la première fois.<rich: listShuttle> - Prévenir les doublons?

Cependant, quand je vais pour modifier un Item et changer le Categories il est, ma liste source <rich:listShuttle /> contient toutes les Categories, pas seulement celui de la Item n'est pas actuellement. Par conséquent, il est possible pour déplacer un doublon Category de la source vers la cible. Cela crée des problèmes lorsque j'essaie de valider mon Item dans la base de données.

Est-il possible d'empêcher le réglage de ces doublons? Je pense qu'il y avait un drapeau que je pourrais définir, mais je n'ai encore rien trouvé.

+1

afficher du code .. il est beaucoup plus facile d'apprendre à connaître le problème du code, plutôt que des explications. – Bozho

Répondre

0

j'ai pu résoudre avec succès ce problème en changeant de <rich:listShuttle /> à <rich:pickList />. Il a accompli tout ce que je cherchais, et a bien traité le problème des doublons.

0

Sans voir de code ou comprendre vraiment votre problème, vous pouvez supprimer les doublons en utilisant un ensemble au lieu d'une liste.

Si votre Categories a mis en place equals() et hashCode() vous pouvez facilement supprimer les doublons en mettant tout dans un Set avant de l'ajouter à la liste.

Set<Categories> uniqueSet = new HashSet<Categories>(categoriesCollection); 
List<Categories> backToList = new ArrayList<Categories>(uniqueSet); 
+0

Le contrôle 'rich: listShuttle'' targetValue' doit être de type 'java.util.List' - il ne peut pas être une instance de' Set'. –

+0

Oui, et si vous regardez mon code, vous voyez que je mets l'ensemble dans une liste –