我有一个Person类和一个ModelAttribute“ nameList”,它从数据库中获取现有的人员名单:
@ModelAttribute("nameList")
public List<String> getNames() {
return databaseModel.getNamesList();
}
在jsp中,我有一个表单,我想在其中有2个下拉列表,并选择名称:
<f:form class="form-inline" action="setRelative" modelAttribute="person1"
modelAttribute="person2" >
<label>Person:</label>
<f:select cssStyle="width:150px" path="name" items="${nameList}"
multiple="false">
</f:select>
<f:errors path="name" class="alert alert-danger"></f:errors>
<f:label path="name">Relative:</f:label>
<f:select cssStyle="width:150px" path="name" items="${nameList}"
multiple="false">
</f:select>
<f:errors path="name" class="alert alert-danger"></f:errors>
<label>Person's Relation to Relative:</label>
<f:select cssStyle="width:150px" path="relations"
items="${relationList}" multiple="false">
</f:select>
<button class="btn btn-primary" type="submit">Set
relative</button>
</f:form>
我在表格中两次使用了“ modelAttribute”,并且出现以下错误:“属性限定名称在元素内必须是唯一的” 。但是没有它,我不能从列表中选择其他名称。这是使用一次ModelAttribute的表单的结果:
我当然可以使用简单的输入字段,然后在控制器中使用它,但是有没有一种方法可以同时处理多个ModelAttributes?
答案 0 :(得分:0)
问题不是模型属性,而是path='name'
被使用了两次。
Spring无法理解用于name
路径的值,您应该将其更改为path='name1'
和path='name2'
之类的东西(并对模型进行相应更改),或者使用名称作为数组或列表名称,例如path='name[0]'
和path='name[1]'
我不确定在不查看控制器代码的情况下如何使用名称,但主要思想是问题不在于模型属性内,而在于同一路径中被使用两次