我甚至不确定如何去问这个问题,但我会试着去尝试一下。
我有一个我支持的现有应用程序,它由一堆值组成的动态生成的形式组成。表单被分解成一个由行和列组成的矩阵,JSP使用此信息构造所需的表单:inputs。为了构建表单,我有一些类似的Java类(主要是伪代码,以便您了解我在做什么):
class Form {
List<FormParts> parts;
}
class FormParts {
List<FormRow> rows;
List<FormHeader> headers;
}
class FormRow {
String name;
}
class FormHeader {
String name;
}
我使用这些类在FormParts中动态构建表单,方法是循环遍历表单,然后使用FormRows和FormHeaders构建form:inputs表,使用计数器对FormResponse中描述的结果答案列表进行索引:
class FormResponse {
List<FormAnswer> answers;
}
class FormAnswer {
int rowNumber;
int headerNumber;
String value;
}
我遇到的问题是List<FormAnswer> answers
。因为它是一个列表,所以我必须存储所有答案,甚至是空答案(Null),以便能够从DB重新加载FormResponses。这会在我的表中创建大量的垃圾行,并使应用程序变慢。然而,当我在大约4个月前第一次写这篇文章时,我记得我曾挣扎过一段时间,试图弄清楚如何让Spring MVC绑定到Map of Maps,这将是一种更好的实现方式,因为我可以简单地跳过不需要的答案。我记得当时的问题是,在Spring MVC内部,这些列表和Map变成了LazyList和LazyMap。
有没有人有其他可能的解决方案?
发布于 2013-06-13 05:56:24
在Auto populating Set上查看我关于动态表单和Spring的回答。
关键是使用Map<Integer, YourObject>
而不是列表。有了这些,你就可以在你的索引中留下空位了。
使用Map of Maps是不可能的,因为泛型将被删除。映射始终需要是object的属性。所以你的例子应该没问题。
LazyList / LazyMap的概念早就消亡了。Spring能够操纵any list and map type。如果Map属性为null,则LinkedHashMap
的实例为created by default。
另一种可能是手动进行绑定和验证,然后通过网络发送JSON (即在<input type="hidden">
中以JSON的形式提交表单,或者直接通过AJAX提交表单)。
https://stackoverflow.com/questions/17073282
复制相似问题