我正在尝试使用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
来循环键,以循环遍历该键的值。这不是我在原帖中所要求的,因为我正在寻找更通用的解决方案,并且延迟加载使我指向了正确的方向。
答案 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();
}
}
当我没记错的时候,有一种方法没有那种工厂的东西,但我不确定。