对象集合的表单的 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)。
我正在尝试创建一个可以一次编辑所有Foo
s 的表单。我找到了很多如何使用 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('')"/>
但是,我还没有想出如何同时做到这两点,将所有Foo
s 绑定到表单元素。
这是一个失败的天真的尝试:
[#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)的主要内容,如果未能解决你的问题,请参考以下文章