【问题标题】:spring form:form data-binding inside c:forEachspring form:form data-binding inside c:forEach
【发布时间】:2016-10-06 12:22:07
【问题描述】:

我想通过以下方式进行一些数据绑定:

<c:forEach var="form" items="${forms}" varStatus="status">
  <form:form modelAttribute="form"> 
    <form:input path="key"/>
  </form:form>
</c:forEach>

但问题是,我认为模型属性不能是动态引用,或者至少我不知道如何表达。

forms 是具有key 属性的对象的集合。

我发现了许多其他解决方案,例如使用状态变量,例如

<form:input path="${forms[status.index].key}"/>

但我需要直接引用“key”而不是这个数组访问前缀。

有什么想法可以实现吗?

【问题讨论】:

    标签: spring forms jsp spring-mvc data-binding


    【解决方案1】:

    试试这个,

    <form:form modelAttribute="${form}"> 
        <form:input path="${form.key}"/>
    </form:form>
    

    此外,如果您使用的是 Map 集合,那么您可以使用 ${form.value} 访问该值。

    在您的代码中 &lt;form:form modelAttribute="form"&gt; 将字符串 form 表达为 modelAttribute 名称,而不是您希望绑定为 modelAttribute 的实际值。

    【讨论】:

    • 我已经尝试过了,但不起作用。 “java.lang.IllegalStateException:Bean 名称'de'的 BindingResult 和普通目标对象都不能用作请求属性”我认为这是因为路径的内容需要是相对于表单的 modelAttribute 的实际路径,而不是密钥本身
    • 这意味着你没有在你的请求处理方法中使用这个模型属性。另外我不明白你为什么要为每个表单绑定一个字段?如果这不是您的意图,请将&lt;form:form&gt; 标签移到&lt;c:forEach&gt; 标签之外。
    • 模型正在使用中。如果我只是将值打印为例如

      ${form.key}

      在forEach里面,正确显示了。
    • 您能分享一下您使用de modelAttribute 的 RequstHandling 方法吗?
    • 我无法将表单向上移动一级,因为我想生成多个表单,列表中的每个对象一个表单。上面的单个输入表单只是一个简单的示例,以说明我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多