我可以在HashMaps中为多个Palette保留可用和选定的值吗?

时间:2014-11-20 13:02:20

标签: java tapestry

假设我有这样的循环:

<t:loop source="rolesToDisplay" value="selectedRole">
    <t:palette t:id="paletteSubjects" clientId="${prop:paletteSubjectsId}" model="availableSubjects.get(selectedRole)"
       selected="selectedSubjects.get(selectedRole)" encoder="stringValueEncoder"/>
</t:loop>

我正在为List<String>中的每个角色保留一些可用和选定的主题(HashMap<String, List<String>>)。

这样我可以查看每个角色的主题,但是如何更新和提交ech角色的值呢?

如果我尝试将其更改为:

<t:loop source="rolesToDisplay" value="selectedRole">
    <t:palette t:id="paletteSubjects" clientId="${prop:paletteSubjectsId}" model="availableSubjects.get(selectedRole)"
       selected="selected" encoder="stringValueEncoder"/>
</t:loop>

public List<String> getSelected()
{
    return selectedSubjects.get(selectedRole);
}

public void setSelected(final List<String> sel)
{
    selectedSubjects.get(selectedRole).addAll(sel);
}

我在提交时遇到错误:组件user / Edit的参数'selected':palettesubjects绑定为null。此参数不允许为空。

我打赌还有另一种方式......

1 个答案:

答案 0 :(得分:0)

我不确定,但您可能需要初始化第一个条目的列表?

public List<String> getSelected() {
   if (!selectedSubjects.containsKey(selectedRole)) {
      selectedSubjects.put(selectedRole, new ArrayList<String>());         
   }
   return selectedSubjects.get(selectedRole);
}

public void setSelected(final List<String> sel) {
   List<String> selected = getSelected();
   selected.clear();
   selected.addAll(sel);
}