弹出列表绑定表单

时间:2011-07-26 15:07:20

标签: forms spring jsp binding

我正在尝试使用Spring将自定义对象的list / arraylist / hashmap / etc绑定到我的表单中。现在,控制器在referenceData()中创建两个列表(布尔列表和自定义对象列表)的Map,并将其提供给使用这些值填充字段的表单。这些值是使用Hibernate从MySQL数据库初始化的,而且一切正常。在初始化表单之前,列表是已知长度,因此该部分更容易。现在我想做的是正确绑定表单中的那些对象,这样当进行更改时,我可以在onSubmit()(或任何适当的地方)检测到,并相应地更新数据库。我似乎无法在表单中正确绑定它们,以便我可以看到所做的更改。我尝试使用表单字段列表作为模型,但即使这样也无法正常工作。我只需要以特定方式注入列表吗?这里有任何想法或例子吗?任何帮助将不胜感激。

更新:在拉尔夫的要求下,这里是我使用的解决方案: 在我的数据对象类中,我使用MapUtils.lazyMap()延迟加载地图,使用String键和其他自定义对象值。另一个自定义对象只是一个包含List<String>和getter / setter的类。在相应的.jsp文件中,我只是嵌套几个循环来循环使用loop.current.key然后loop2.current.value.paramsList来循环键,以循环遍历该键的值。这不是我在原帖中所要求的,因为我正在寻找更通用的解决方案,并且延迟加载使我指向了正确的方向。

1 个答案:

答案 0 :(得分:0)

在Spring 2中,你需要在Command对象中有一个特殊的List,如果列表还没有这个大小的话,如果添加第x个元素事件就能增长。

这样做的一种方法是使用来自commons-collections的LayzList装饰器。

@Override
protected Object formBackingObject(final HttpServletRequest request)
                                   throws Exception {
    List<PosterSelectionRow> posterSelectionRowList = LazyList.decorate(
            new ArrayList<PosterSelectionRow>(),
            new PosterSelectionRowListFactory());
    return new PosterSelectionCommand(posterSelectionRowList);
    //PosterSelectionCommand contains a list of selected poster rows
}

private static class PosterSelectionRowListFactory
               implements org.apache.commons.collections.Factory {

    /** Invoked if the list need a new element */
    public Object create() {            
        return = new PosterSelectionRow();
    }
}

当我没记错的时候,有一种方法没有那种工厂的东西,但我不确定。