将数据列表从JSP传递到Java中的Set

时间:2014-12-24 11:41:07

标签: java jsp struts2

我使用Struts2框架。在我的动作类中,我有一个带有getter和setter的Set<Item>属性:

private Set<Item> items;

public Set<Item> getItems()
{
    return items;
}

public void setItems(Set<Item> items)
{
    this.items = items;
}

在我的JSP上,我有以下形式:

<form action='...'>
    <input type="hidden" name="items.id" value="4592"/>
    <input type="hidden" name="items.id" value="5016"/>
    <input type="hidden" name="items.id" value="3227"/>
    <input type="hidden" name="items.id" value="8549"/>
</form>

我希望该表单在提交到我的操作类时,会生成Set<Item>,其中包含4个Item个对象,并且每个项目都会设置Id个属性到给定的值。但是,当我运行它时,该集是空的(没有元素)。

真正奇怪的是我记录了这个动作:

  

ACTIONCLASS - 获取行动类中的一组项目   ACTIONCLASS - 设置动作类中的项目集
  ACTIONCLASS - 设置设置后,项目集为EMPTY
  ITEMCLASS - 现在创建一个新的ITEM对象
  ITEMCLASS - 设置项目值为:4592
  ITEMCLASS - 现在创建一个新的ITEM对象
  ITEMCLASS - 将项目ID设置为值:5016
  ITEMCLASS - 现在创建一个新的ITEM对象
  ITEMCLASS - 将项目ID设置为值:3227
  ITEMCLASS - 现在创建一个新的ITEM对象
  ITEMCLASS - 项目值为:8549
  ACTIONCLASS - 现在启动execute()方法
  ACTIONCLASS - 项目集是EMPTY

正如您所看到的,这些项目已创建并且正在设置其ID!但不幸的是,这些都没有添加到集合中。这是为什么?

我需要更改以下一行才能使其按预期工作?

<input type="hidden" name="items.id" value="8549"/>

注意:如果我在操作类中将Set更改为List,则此代码有效。但我真的想使用Set代替List

1 个答案:

答案 0 :(得分:0)

使用括号需要名称,例如

<s:hidden name="items(%{#status.index}).id" value="8549"/> 

假设它与迭代器一起使用。

Set属性

一起使用的注释
@Element(value = Item.class)
@Key(value = Integer.class)
@KeyProperty(value = "id") 
@CreateIfNull(value = true)
private Set<Item> items = new HashSet(0);