我使用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
。
答案 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);