Bentuk dinamis dengan pengiriman banyak objek di Musim Semi?

Saya memiliki Objek CreateProjectFormModel sebagai berikut (Saya menggunakan Spring 4).

public class CreateProjectFormModel {
    private Project project;
    private List<DUser> users;

    public CreateProjectFormModel() {
        this.project = new Project();
        this.users = new ArrayList<DUser>();
    }

    public Project getProject() {
        return project;
    }

    public void setProject(Project project) {
        this.project = project;
    }

    public List<DUser> getUsers() {
        return users;
    }

    public void setUsers(List<DUser> users) {
        this.users = users;
    }
}

Saya tidak dapat mengetahui cara membuat Pengontrol dan formulir yang sesuai sehingga beberapa DUser dapat dikirimkan sekaligus - dapatkah melakukannya jika objek tidak terdiri dari koleksi?

Baca ini, tapi saya tidak tahu Saya tidak tahu bagaimana pengguna akan ditambahkan ke proyek sebelumnya, sehingga tidak dapat menentukan ukuran pengguna.

Saya membaca tutorial thymeleaf, tetapi tertarik untuk mengetahui apakah dapat melakukannya tanpa menggunakan daun thyme.

Terima kasih.


person ykesh    schedule 20.12.2014    source sumber


Jawaban (2)


Tautan yang Anda posting di pertanyaan List‹Foo › sebagai objek pendukung formulir menggunakan pegas 3 mvc, sintaksis yang benar? akan memberikan solusi untuk Anda, apa yang dibahas di komentar

Saya berasumsi bahwa solusi ini memerlukan jumlah kolom input yang tetap, apakah itu benar? Bagaimana jika Anda memiliki sejumlah kolom input dinamis?

tidak menyangkut jumlah pengguna, yang tidak harus diperbaiki, melainkan menyangkut fakta bahwa properti objek berbeda, yang menurut saya bukan kasus Anda. Jadi, jika DUser Anda memiliki properti userName, dan mis. Proyek Anda memiliki properti nama. Metode pengontrol Anda bisa saja berupa,

@RequestMapping(value = "/test", method=RequestMethod.POST)
public String processSubmit(CreateProjectFormModel createProjectFormModel) {
       ...
}

dan wujudmu

<form:form action="/form/test" method="post">
    <div class="single">
        <input type="text" name="project.name"/>
        <input type="text" name="users[0].userName"/>
        <a href="/id#" onclick="addNewUserInputSection();return false">add another user</a>
        <input type="submit" value="Save">
    </div>
</form:form>

di mana Anda harus melakukan upaya tertentu adalah dengan membuat fungsi javascript addNewUserInputSection yang akan menambahkan kumpulan kolom input baru untuk properti users dengan indeks yang bertambah, misalnya.

<form:form action="/form/test" method="post">
    <div class="single">
        <input type="text" name="project.name"/>
        <input type="text" name="users[0].userName"/>
        <input type="text" name="users[1].userName"/>
        <a href="/id#" onclick="addNewUserInputSection();return false">add another user</a>
        <input type="submit" value="Save">
    </div>
</form:form>

contohnya sederhana, tetapi sudah cukup untuk menyelesaikan masalah Anda

person Master Slave    schedule 21.12.2014

Meskipun jawaban di atas berhasil, berikut adalah alternatif yang tidak mengharuskan Anda membuat kelas wrapper/kelas formulir.

Model Dan Pengontrol

public class Foo {
    private String name;
    private List<Foo> fooList;
    public Foo() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public String getFooList() {
        return fooList;
    }

    public void setFooList(String fooList) {
        this.fooList = fooList;
    }

}

@Controller("/")
public class FooController{

    //returns the ModelAttribute fooListWrapper with the view fooForm
    @RequestMapping(value = "/FOO", method = RequestMethod.GET)
    public String getFooForm(Model model) {
        List<Foo> fooList = service.getFooList();

        model.addAttribute("fooList", fooList);

        return "list_foo"; //name of the view
    }

    @RequestMapping(value = "/FOO", method = RequestMethod.POST)
    public String postFooList(@ModelAttribute("foo")Foo foo, Model model) {
        List<Foo> list = foo.getFooList(); // **This is your desired object. 
        //If you debug this code, you can easily find this is the list of  
        //all the foo objects that you wanted, provided you pass them properly. 
        //Check the jsp file to see one of the ways of passing such a list of objects**
        //Rest of the code
    }

}

Tampilan JSP

<form:form id="form" action="<paste-target-url-here>" method="POST" modelAttribute="fooList">


    <c:forEach items="${fooList}" varStatus="i">
           <form:input path="fooList[${i.index}].name" type="text"/>
           <!-- Here you are setting the data in the appropriate index which will be caught in the controller -->
    </c:forEach>


    <button>submit</button>
</form:form>
person sbsatter    schedule 27.02.2017