how we can bind a list of a list of object

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

how we can bind a list of a list of object

sarahAb
Hii,
I have a form where the user can add as much as he want of Table object that also can contains as much as he want of Columns object.. I've tried the code bellow but nothing works and the form dosnt appear anymore when I've tried to bind the two lists.

Controller

@ModelAttribute("page")
    public Page getTable() {
                Page page = new Page();
        page.setTables(new ArrayList<>());
        page.tables.forEach((t) ->{
        t.setColumns(new ArrayList<>());
    });
        return page;
    }
       

    @GetMapping("/scriptsqlgenerator")
    public String viewsetter(@ModelAttribute("page") Page page) {
   
        return "squeletteSqlNext";
    }

    @PostMapping("/scriptsqlgenerator")
    public String addForm(@ModelAttribute("page") Page page) {
    page.tables.forEach((t) ->{
    System.out.println(t.getName());
        t.getColumns().forEach((c) -> {
        System.out.println(c.getName());
        System.out.println(c.getType());
        System.out.println(c.getIndex());
        System.out.println(c.getNotnull());
        });
    });
                return "squeletteSqlNext";
    }

Html

<form th:object="${page}" method="post"
                                                th:action="${'/scriptsqlgenerator'}">
                                                <div th:each="table,i: ${page.tables}">
                                                        <div class="row">
                                                                <div class="col">
                                                                        <div>
                                                                                <div class="row">
                                                                                        <div class="col form-group">
                                                                                                <label for="tableName">Table Name</label> <input
                                                                                                        th:field="*{tables[__${i.index}__].name" type="text" class="form-control"
                                                                                                        id="tableName">
                                                                                        </div>
                                                                                </div>
                                                                        </div>

                                                                       
                                                                        <div id="columnList">
                                                                                <div class="row">
                                                                                        <div class="col form-group d-none">id</div>
                                                                                        <div class="col form-group">Column name</div>
                                                                                        <div class="col form-group">Type</div>
                                                                                        <div class="col form-group">Index</div>
                                                                                        <div class="col form-group">Null</div>
                                                                                </div>
                                                                                <div class="row item"
                                                                                        th:each="column, status : ${table.columns}">
                                                                                        <div class="col form-group d-none">
                                                                                                <input th:field="*{tables[__${i.index}__].columns[__${status.index}__].id}"
                                                                                                        type="text" class="form-control">
                                                                                        </div>

                                                                                        <div class="col form-group">
                                                                                                <input th:field="*{tables[__${i.index}__].columns[__${status.index}__].name}"
                                                                                                        type="text" class="form-control">
                                                                                        </div>

                                                                                        <div class="col form-group">
                                                                                               

                                                                                                <select th:field="*{tables[__${i.index}__].columns[__${status.index}__].type}"
                                                                                                        id="inputState" class="form-control" name="type" required>
                                                                                                        <option value="" selected disabled>Choose...</option>
                                                                                                        <option th:value="${type}">on</option>
                                                                                                        <option th:value="${type}">off</option>
                                                                                                </select>

                                                                                        </div>
                                                                                        <div class="col form-group">
                                                                                               

                                                                                                <select th:field="*{tables[__${i.index}__].columns[__${status.index}__].index}"
                                                                                                        id="inputState" class="form-control" name="index" required>
                                                                                                        <option value="" selected disabled>Choose...</option>
                                                                                                        <option th:value="${index}">on</option>
                                                                                                        <option th:value="${index}">off</option>
                                                                                                </select>

                                                                                        </div>
                                                                                        <div class="col form-group">
                                                                                               

                                                                                                <select th:field="*{tables[__${i.index}__].columns[__${status.index}__].notnull}"
                                                                                                        id="inputState" class="form-control" name="notnull"
                                                                                                        required>
                                                                                                        <option value="" selected disabled>Choose...</option>
                                                                                                        <option th:value="${notnull}">on</option>
                                                                                                        <option th:value="${notnull}">off</option>
                                                                                                </select>

                                                                                        </div>
                                                                                </div>
                                                                        </div>
                                                                </div>
                                                        </div>
                                                        <div class="row">
                                                                <div class="col">
                                                                        <button type="button" class="btn btn-primary"
                                                                                onclick="addRow()">Add row</button>
                                                                </div>
                                                        </div>
                                                <div class="text-center">
                                                                <button type="submit" class="btn btn-outline-danger btn-lg"
                                                                        style="margin-top: 50px;">Generate File</button>
                                                        </div>
                                                        </div>
                                        </form>


any help pleaaase