繁体   English   中英

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

[英]Passing list of data from JSP to Set in Java

我使用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对象一起创建,并且每个ItemId属性都将设置为给定值。 但是,当我运行此命令时,集合为空(无元素)。

真正奇怪的是,我记录了此操作:

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

如您所见,将创建项目并设置其ID! 但不幸的是,并未添加到集合中。 为什么是这样?

为了使它按预期工作,我需要对以下行进行什么更改?

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

注意:如果我在动作类中将“ SetList更改为该代码,则可以使用。 但是我真的很想使用Set而不是List

名称需要使用括号,例如

<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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM