嵌套bean的Spring表单标记

时间:2011-10-29 12:31:23

标签: java spring spring-mvc

我有2个类,如下,

public class CheckInBean implements Serializable{

private String user;
private Date checkInDate;
private List<ItemBean> items;


..followed by getters and setters

public class ItemBean implements Serializable{

private static final long serialVersionUID = 1L;

private int itemId;
private String barcode;
private String description;
private int minimalCount;
private int initialCount;
private int actualCount;
private String location;

    ... followed by getters and setters

我有一个使用spring form标签的jsp页面。

我需要为List输入日期和多个ItemBean值(在同一页面上多个)。我不知道怎么做我只是在stackoverflow中的某处读取使用Propertyeditor,但我不确定它是否适合我的要求。请建议。

我正在使用Spring 3.

感谢名单

1 个答案:

答案 0 :(得分:1)

那么,发生的事情是,如果您提交包含一个或多个ItemBeans数据的表单,Spring MVC将尝试将这些值映射到EXISTING ItemBean实体。如果CheckInBean实例中的ItemBeans列表为null / empty,则Spring MVC将抛出错误。您可以采取多种措施来防止这种情况发生:

  • 制作您自己的java.util.List实现(例如,您可以覆盖ArrayList)并更改get(int position)方法,以便在调用某个位置时通常该位置将返回null,您首先创建一个新实例,将其放在(超级)列表中的该位置,然后返回它。这是一种破解,但是如果你可以有一个大间隔的ItemBean实例(比如你可能需要3或者你可能需要400),那就好了,因为它只会创建所需的实例而不会过度污染内存。

  • 您可以使用预定义数量的空项预先填充CheckInBean内的ItemBeans列表,这些空项是用户可以使用表单添加到该Bean的最大ItemBean实例数。这不像上面的选项,但它往往是浪费记忆。如果你有一个可以添加到CheckInBean的最小数量的ItemBeans就没问题。