Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Spring MVC中的数组@ModelAttribute扩展_Spring_Spring Mvc_Modelattribute - Fatal编程技术网

Spring MVC中的数组@ModelAttribute扩展

Spring MVC中的数组@ModelAttribute扩展,spring,spring-mvc,modelattribute,Spring,Spring Mvc,Modelattribute,*编辑:我可能不得不使用列表,但同样的原则也适用 我正在尝试使用@modeldattribute注释将数组绑定到表单。用数组的内容填充一个表(数组中的每个元素对应于表中的一行)。数组可能已填充数据,也可能在绑定时为空。用户可以向表中添加行(这将向数组中添加元素) 我的问题是,如果在传入数组之前已经定义了它,那么如何将元素添加到数组中?提交表单时是否会自动发生这种情况 <body> <h1>Members</h1> <form:fo

*编辑:我可能不得不使用列表,但同样的原则也适用

我正在尝试使用@modeldattribute注释将数组绑定到表单。用数组的内容填充一个表(数组中的每个元素对应于表中的一行)。数组可能已填充数据,也可能在绑定时为空。用户可以向表中添加行(这将向数组中添加元素)

我的问题是,如果在传入数组之前已经定义了它,那么如何将元素添加到数组中?提交表单时是否会自动发生这种情况

<body>
    <h1>Members</h1>
        <form:form action="configure" modelAttribute="members" method="post" id="member-form">
            <table id="member-table" class="table">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th></th>
                    </tr>
                </thead>
                <tbody id="member-table-body">
                    <c:forEach items="${members}" var="member" varStatus="i" begin="0" >
                        <tr class="member">    
                            <td><form:input path="members[${i.index}].name" id="name${i.index}" /></td>
                            <td><a href="#" class="remove">Remove</a></td>
                        </tr>
                    </c:forEach>
                </tbody>
            </table>
            <input type="submit" value="Save" id="submit" />
            <a href="#" id="add">Add Member</a>
            <a href="?f=">Reset List</a>
        </form:form>   
</body>

}));​

这不能由Spring为您自动完成。实际上,你在这里没有任何东西。您正在使用JSTLEL迭代数组,并将其设置为文本字段。理想情况下,处理这个问题的方法是,您需要将整个表准备为json字符串,并提交到后端,在那里进行解析,并了解有多少表已被添加/删除/更新。您可以使用隐藏列来维护此状态,并在后端进行标识。我认为阵列不会在前端自动扩展。这是我的2美分。

您需要创建一个包装列表的模型类,并在控制器中使用此模型

比如:

package net.viralpatel.spring3.form;

import java.util.List;

public class ContactForm {

    private List<Contact> contacts;

    public List<Contact> getContacts() {
        return contacts;
    }

    public void setContacts(List<Contact> contacts) {
        this.contacts = contacts;
    }
}
package net.viralpatel.spring3.form;
导入java.util.List;
公开课联络表格{
私人名单联系人;
公共列表getContacts(){
返回联系人;
}
公共联系人(列出联系人){
这个。联系人=联系人;
}
}
然后在JSP中将其用作:

<c:forEach items="${contactForm.contacts}" var="contact" varStatus="status">
    <tr>
        <td align="center">${status.count}</td>
        <td><input name="contacts[${status.index}].firstname" value="${contact.firstname}"/></td>
        <td><input name="contacts[${status.index}].lastname" value="${contact.lastname}"/></td>
        <td><input name="contacts[${status.index}].email" value="${contact.email}"/></td>
        <td><input name="contacts[${status.index}].phone" value="${contact.phone}"/></td>
    </tr>
</c:forEach>

${status.count}

请参阅本教程:

Viral..我在您的网站上看到了示例…这似乎是动态编辑和保存现有记录..但用户的问题是,我们是否可以向表中添加新行以动态增加您的列表,并且当您提交时,控制器会在“联系人”列表中获取新添加的记录。
<c:forEach items="${contactForm.contacts}" var="contact" varStatus="status">
    <tr>
        <td align="center">${status.count}</td>
        <td><input name="contacts[${status.index}].firstname" value="${contact.firstname}"/></td>
        <td><input name="contacts[${status.index}].lastname" value="${contact.lastname}"/></td>
        <td><input name="contacts[${status.index}].email" value="${contact.email}"/></td>
        <td><input name="contacts[${status.index}].phone" value="${contact.phone}"/></td>
    </tr>
</c:forEach>