如何将2个输入保存到不同的ModelAttributes?

时间:2019-01-28 10:14:06

标签: java spring-mvc jsp

我有一个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的表单的结果:enter image description here

我当然可以使用简单的输入字段,然后在控制器中使用它,但是有没有一种方法可以同时处理多个ModelAttributes?

1 个答案:

答案 0 :(得分:0)

问题不是模型属性,而是path='name'被使用了两次。

Spring无法理解用于name路径的值,您应该将其更改为path='name1'path='name2'之类的东西(并对模型进行相应更改),或者使用名称作为数组或列表名称,例如path='name[0]'path='name[1]'

我不确定在不查看控制器代码的情况下如何使用名称,但主要思想是问题不在于模型属性内,而在于同一路径中被使用两次