#list iterator中的@ spring.formInput

时间:2011-11-04 07:37:56

标签: spring-mvc freemarker

<#list flowList as flow>
    <@spring.formInput "flow.createDatetime" />
</#list>

flowList是arrayList。

freemarker.template.TemplateModelException: Method public org.springframework.web.servlet.support.BindStatus org.springframework.web.servlet.support.RequestContext.getBindStatus(java.lang.String) throws java.lang.IllegalStateException threw an exception when invoked on org.springframework.web.servlet.support.RequestContext@8bc713e with arguments of types [java.lang.String,]
    at freemarker.ext.beans.OverloadedMethodModel.exec(OverloadedMethodModel.java:134)
    at freemarker.core.MethodCall._getAsTemplateModel(MethodCall.java:93)

如何解决@spring.formInput中的#list

3 个答案:

答案 0 :(得分:2)

您是否尝试过进行中间分配?我在其他StackOverflow页面上看到了这个问题,比如Freemarker syntax for a form for a collection of objects (Spring 3 MVC)

<#list flowList as flow>
   <#assign flowDate = flow.createDatetime />
   <@spring.formInput "flowDate" />
<\#list>

答案 1 :(得分:0)

以下解决方法对我有用,但非常难看:

<#list flowList as flow>
    <#assign index=flowList?seq_index_of(flow)>
    <@spring.formInput "flowList[${index}].createDatetime" />
</#list>

发布上述表单时,您需要确保流列表预先填充了空流。或者,只使用Spring的AutoPopulatingList作为流列表实现。

答案 2 :(得分:0)

对于弹簧绑定对象,必须提供准确的引用。因此,您需要在标记中添加索引。当您将表单发回并在控制器方法中将flowlist对象作为请求主体时,需要这样做。

<#list flowList as flow>
    <@spring.formInput "flowList[${flow_index}].createDatetime" />
</#list>

渲染后,如果你看一下HTML就像

<input type="text" id="flowList0.createDatetime" name="flowList[0].createDatetime" value="..." />