【问题标题】:<rich:listShuttle> -- Preventing duplicates?<rich:listShuttle> -- 防止重复?
【发布时间】:2011-04-23 01:57:44
【问题描述】:

我有一个数据模型,其中有一个Item,它可以属于一个或多个Categories。我正在尝试显示&lt;rich:listShuttle /&gt; 允许用户选择Item 应该属于哪个Categories。我正在使用 RichFaces 和 Seam 2.2.x,并且在最初设置值时没有遇到任何问题。我的来源是定义的Categories 的列表,而我的目标是Item.values() 属性。第一次设置Categories 时一切正常。

但是,当我进入编辑 Item 并更改其所在的 Categories 时,我的 &lt;rich:listShuttle /&gt; 源列表包含所有 Categories,而不仅仅是 Item 当前不包含的那个因此,可以将重复的Category 从源移动到目标。当我尝试将 Item 提交到数据库时,这会产生问题。

有什么方法可以防止设置这些重复项?我想我可以设置一个标志,但还没有找到任何东西。

【问题讨论】:

  • 显示一些代码。从代码而不是解释中了解问题要容易得多。

标签: java jsf richfaces seam


【解决方案1】:

在没有看到任何代码或真正理解您的问题的情况下,您可以使用 Set 而不是 List 来删除重复项。

如果您的Categories 实现了equals()hashCode(),您可以通过在将其添加到列表之前将所有内容放入Set 来轻松删除重复项。

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

【讨论】:

  • rich:listShuttle 控件targetValue 必须是java.util.List 类型——它不能是Set 的实例。
  • 是的,如果您查看我的代码,您会发现我将集合放入列表中
【解决方案2】:

通过将&lt;rich:listShuttle /&gt; 更改为&lt;rich:pickList /&gt;,我能够成功解决此问题。它完成了我一直在寻找的一切,并且很好地处理了重复问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-09
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2020-08-12
    • 2016-09-28
    相关资源
    最近更新 更多