2

*編集:リストを使用する必要があるかもしれませんが、同じ原則が適用されます。

@ModelAttributeアノテーションを使用して配列をフォームにバインドしようとしています。テーブルには配列の内容が入力されます(配列の各要素はテーブルの行に対応します)。配列にはデータが入力されている場合もあれば、バインド時に空の場合もあります。ユーザーはテーブルに行を追加できます(配列に要素を追加する必要があります)。

私の質問は、配列を渡す前に要素がすでに定義されている場合、どのように要素を配列に追加できるかということです。フォームが送信されると、これは自動的に発生しますか?

<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>

__

$(document).ready(function(){
$('#add').click(function(e) {
    e.preventDefault();
    //Add a member

    //Get the number of rows that are in the table
    var memberTable = $('#member-table-body');
    var numRows = memberTable.children('tr').length

    //Add row to the table.
    // memberTable.innerHTML(

    return false;
});
$('.remove').on('click', function(e) {
                e.preventDefault();
                $(this).parent().parent().remove();
                return false;
});

}); </ p>

4

2 に答える 2

2

List をラップする Model クラスを作成し、この Model をコントローラーで使用する必要があります。

何かのようなもの:

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;
    }
}

そして、これを 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>

このチュートリアルを参照してください: Spring MVC: List of Beans を使用した複数行フォームの送信

于 2012-12-14T09:29:13.400 に答える
0

これは、Spring によって自動的に行われるわけではありません。実際、ここでは何も拘束していません。JSTL EL を使用して配列を反復し、それをテキスト フィールドに設定しています。理想的には、これを処理する方法は、テーブル全体を json 文字列として準備し、バックエンドに送信し、そこで解析して、追加/削除/更新された数を知る必要があることです。この状態を維持し、バックエンドで識別するために非表示の列を設定できます。フロントエンドで配列が自動的に拡張されるとは思わない。これは私の 2 セントです。

于 2012-12-14T01:34:13.030 に答える