Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring绑定和表单字段命名_Java_Spring_Spring Mvc - Fatal编程技术网

Java Spring绑定和表单字段命名

Java Spring绑定和表单字段命名,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有以下几种豆子: class User { private List<Address> addresses; // ... getter and setter for addresses follows } class Address { private String street, city; // ... getters and setters follows } 表格可以是这样的 <form> <input

我有以下几种豆子:

class User {
    private List<Address> addresses;

    // ... getter and setter for addresses follows
}

class Address {
    private String street, city;

    // ... getters and setters follows 
}
表格可以是这样的

<form>
    <input type="text" name="addresses[].street" />
    <input type="text" name="addresses[].city" />
    ...
</form>

我应该如何命名表单中的字段,以便Spring能够进行绑定?

我认为错误是因为它无法将[“”]转换为[number],因此无法找到它应该访问的数组中的元素

对于用于循环或使用显式索引的集合。在大多数情况下,您都希望循环,下面是一个例子:

<form ng-repeat="address in user.addresses">
    <input type="text" ng-model="address.street" />
    <input type="text" ng-model="address.city" />
    ...
</form>

...

请注意,如果您使用angular提交表单,这是可行的(因此,您不允许标准HTML提交,而是提交angular由于ng模型映射而修改的范围对象。

我得到了它。问题是属性缺少索引。Spring可以绑定多个属性(集合、列表、数组)请求参数,但名称必须包含索引

所以表格必须是

<form>
    <input type="text" name="addresses[0].street" />
    <input type="text" name="addresses[0].city" />

    <input type="text" name="addresses[1].street" />
    <input type="text" name="addresses[1].city" />
    ...
</form>

...

您可以在Thymeleaf(服务器端)中使用
${iterationStatus.index}
,而不是
0
1

尝试在控制器方法中添加:model.addAttribute(“retrievedAddresses”,user.addresses);然后在表单中使用just do:name=“retrievedAddresses[0]”是否使用ngRepeat循环这些地址?例如,
…输入字段…
?如果是这样,则需要使用address.street等。我认为错误是因为它无法将[“”]转换为[number]因此它无法从该数组中找到它应该访问的元素。这样就不会提交任何参数,因此Spring不会进行任何绑定。如果您从Angular提交表单,绑定应该在那里。如果您使用标准HTML submit,我不确定您将如何做。
<form ng-repeat="address in user.addresses">
    <input type="text" ng-model="address.street" />
    <input type="text" ng-model="address.city" />
    ...
</form>
<form>
    <input type="text" name="addresses[0].street" />
    <input type="text" name="addresses[0].city" />

    <input type="text" name="addresses[1].street" />
    <input type="text" name="addresses[1].city" />
    ...
</form>