1

我什至不知道如何去问这个,但我会试着试一试。

我有一个我支持的现有应用程序,它由一组值的动态生成形式组成。表单被分成行和列的矩阵,JSP 使用这些信息来构造所需的表单:输入。为了构建表单,我有一些类似的 Java 类(主要是伪代码,以便您了解我在做什么):

class Form {
  List<FormParts> parts;
}

class FormParts {
  List<FormRow> rows;
  List<FormHeader> headers;
}

class FormRow {
  String name;
}

class FormHeader {
  String name;
}

我使用这些类通过循环 FormParts 在 JSP 中动态构建表单,然后使用 FormRows 和 FormHeaders 构建表单:输入表,使用计数器来索引 FormResponse 中描述的结果答案列表:

class FormResponse {
  List<FormAnswer> answers;
}

class FormAnswer {
  int rowNumber;
  int headerNumber;
  String value;
}

我遇到的问题是List<FormAnswer> answers. 因为它是一个列表,所以我必须存储所有答案,甚至是空答案(null),以便能够提供从数据库重新加载 FormResponses 的能力。这会在我的表中创建大量垃圾行,并使应用程序变慢。然而,当我大约 4 个月前第一次写这篇文章时,我记得我挣扎了一段时间试图弄清楚如何让 Spring MVC 绑定到 Map 的 Map,这将是实现这一点的更好方法,因为我可以简单地跳过我不需要的答案。我记得问题是,在 Spring MVC 内部,那些 Lists 和 Maps 变成了 LazyList 和 LazyMap。

有没有人对此有另一种可能的解决方案?

4

1 回答 1

0

在Auto populating Set中检查我对 Spring 动态表单的回答。

关键是使用Map<Integer, YourObject>而不是列表。这样,您的索引中就会出现空白。

使用 Map of Maps 是不可能的,因为泛型将被删除。地图始终需要是 object 的属性。所以你的例子应该没​​问题。

LazyList / LazyMap 的概念早已死去。Spring 能够操作任何列表和地图类型LinkedHashMap如果 Map 属性为 null,则默认创建的实例。


另一种可能性是手动进行绑定和验证,然后通过线路发送 JSON(即在 AJAX 中<input type="hidden">或直接通过 AJAX 将表单作为 JSON 提交)。

于 2013-06-12T21:56:23.607 回答