对象集合的表单的 Freemarker 语法(Spring 3 MVC)

Posted

技术标签:

【中文标题】对象集合的表单的 Freemarker 语法(Spring 3 MVC)【英文标题】:Freemarker syntax for a form for a collection of objects (Spring 3 MVC) 【发布时间】:2011-05-11 14:35:50 【问题描述】:

我有一个命令 bean (FooList),它的属性是一个集合(List of Foo bean)。

我正在尝试创建一个可以一次编辑所有Foos 的表单。我找到了很多如何使用 JSP 执行此操作的示例,但我无法将这些示例转换为 Freemarker 语法。

在我的 Freemarker 模板中,我可以轻松地遍历集合:

[#list fooList.foos as foo]
...
[/#list]

我还可以通过索引引用特定的Foo

[@spring.bind "fooList.foos[0].name" /]
<input type="text" name="$spring.status.expression" value="$spring.status.value?default('')"/>

但是,我还没有想出如何同时做到这两点,将所有Foos 绑定到表单元素。

这是一个失败的天真的尝试:

[#list fooList.foos as foo]
    [@spring.bind "fooList.foos[foo_index].name" /]
    ...
[/#list]

(就其自身而言,$foo_index 在循环内工作。)

谁能指出我正确的方向?

谢谢。

【问题讨论】:

【参考方案1】:

刚刚遇到同样的问题。这对我有用:

[#list fooList.foos as foo]
  <#assign item>fooList.foos[$foo_index].name</#assign>
  [@spring.bind item /]
  ...
[/#list]

【讨论】:

在旁注中,我发现 Spring 的 Freemarker 支持有时有些错误。这真的很遗憾,因为恕我直言,与 JSP 相比,我认为 Freemarker 更先进,更易于使用【参考方案2】:

试试,

[#list fooList.foos as foo] 
    [@spring.bind "foo.name" /] 
    ... 
[/#list] 

根据the list directive 上的 freemarker 文档,该示例中的 foo 将一一引用列表中的每个项目。

【讨论】:

谢谢,但这是我尝试的第一件事。如果您确定这是正确的解决方案,那么我可以提供回溯(但不是现在)。 抱歉,我实际上无法尝试,但我不明白为什么这不起作用。你看过这个例子吗, (14.4.5.2) ? static.springsource.org/spring/docs/2.0.x/reference/view.html 是的,我看过那个例子,但它只显示了一个 Freemarker 语法的简单例子。我正在寻找一个绑定任意大小的集合的示例。【参考方案3】:

我觉得应该是这样的:

[#list fooList.foos as foo]
    [@spring.bind "fooList.foos[" + foo_index + "].name" /]
    ...
[/#list]

【讨论】:

以上是关于对象集合的表单的 Freemarker 语法(Spring 3 MVC)的主要内容,如果未能解决你的问题,请参考以下文章

将对象列表传递给Freemarker然后循环

更改表单中的spring jsp日期输入绑定以使用freemarker

FreeMarker语法

freemarker list集合去重,实现hashset

将对象列表传递给 Freemarker 然后循环

Spring Boot:Spring Boot整合FreeMarker