본문 바로가기

Web/Spring & Spring boot

[spring boot] form으로 전송하여 list로 받기

form안에 form이 또 있어서 commandName로 구분하였다.

        <div style="flex: 1; border-right: 1px solid #ccc; padding-right: 20px;">
            <form id="menuOrderUpdate" commandName="menuOrders" th:action="@{/admin/menuOrderUpdate}" method="post">
            <h3>메뉴 상태 변경</h3>
            <ul class="navbar-nav" id="menuList">
                <tr th:each="UList, uStat : ${UpList}">
                    <li class="nav-item" data-seq="${UList.seq}" data-type="U" onclick="selectMenu(this)">
                        <span th:text="${uStat.index + 1} + '.'" style="margin-right: 10px;"></span>
                        <input type="hidden" th:name="'upMenuLists[' + ${uStat.index} + '].seq'" th:value="${UList.seq}" />
                        <input type="hidden" id="OrderBy" th:name="'upMenuLists[' + ${uStat.index} + '].orderNum'" th:value="${UList.orderNum}" />
                        <a class="nav-link js-scroll-trigger" th:text="${UList.menuTitle}" style="display: inline;"></a>
                        <form th:action="@{/admin/menuUpdate}" method="post" style="display: inline;">
                            <input type="hidden" name="seq" th:value="${UList.seq}" />
                            <input type="hidden" name="menuHide" th:value="${UList.menuHide}" />
                            <input type="hidden" name="menuType" th:value="U" />
                            <button class="toggle-btn" type="submit" th:text="${UList.menuHide == '0' ? '숨기기' : '보이기'}"></button>
                        </form>
                    </li>
                    <nav class="nav nav-item flex-column">
                        <ol>
                            <th th:each="DList, dStat : ${DownList}" th:if="${UList.seq == DList.upMenuSeq}">
                                <li class="nav-item" data-seq="${DList.seq}" data-type="D" onclick="selectMenu(this)">
                                    <a class="nav-link" th:text="${DList.downMenuTitle}" style="display: inline;"></a>
                                    <input type="hidden" th:name="'downMenuLists[' + ${dStat.index} + '].seq'" th:value="${DList.seq}" />
                                    <input type="hidden" id = "OrderBy" th:name="'downMenuLists[' + ${dStat.index} + '].orderNum'" th:value="${DList.orderNum}"/>
                                    <form th:action="@{/admin/menuUpdate}" method="post" style="display: inline;">
                                        <input type="hidden" name="seq" th:value="${DList.seq}" />
                                        <input type="hidden" name="menuHide" th:value="${DList.menuHide}" />
                                        <input type="hidden" name="menuType" th:value="D" />
                                        <button class="toggle-btn" type="submit" th:text="${DList.menuHide == '0' ? '숨기기' : '보이기'}"></button>
                                    </form>
                                </li>
                            </th>
                        </ol>
                    </nav>
                </tr>
            </ul>
            <div style="margin-top: 20px;">
                <button onclick="moveMenu('up')">▲ 위로</button>
                <button onclick="moveMenu('down')">▼ 아래로</button>
            </div>
            <div style="float: right; margin-left: 10px;">
                <button form="menuOrderUpdate" type="submit">정렬 수정</button>
            </div>
            </form>
        </div>

 

controller

 @RequestMapping("menuOrderUpdate")
    public ModelAndView menuOrderUpdate(
            @ModelAttribute("menuOrders") menuList menuOrders,
            ModelAndView model) {
        boolean result = false;

        result = menuListService.setMenuOrderUpdate(menuOrders);

        if(result){
            model.addObject("data", new ReturnMessage("메뉴 상태가 업데이트 되었습니다.", "/admin/index?ChooseNum=1"));
        }else{
            model.addObject("data", new ReturnMessage("오류가 발생하였습니다.", "/admin/index?ChooseNum=1"));
        }

        model.setViewName("alertMessage/CommonMessage");

        return model;
    }

 

model

package com.portfolio.mynewpage.DTO;
import lombok.*;

import java.util.ArrayList;
import java.util.List;

@NoArgsConstructor
@AllArgsConstructor
@Data
@Getter
@Setter
public class menuList {

    private int seq;

    private int upMenuSeq;

    private int downMenuSeq;

    private String menuTitle;

    private String downMenuTitle;

    private String adminAuth;

    private String menuHide;

    private String downHide;

    private String exitDownMenu;

    private int orderNum;

    private int notShowTitle;

    private List<menuList> upMenuLists = new ArrayList<>();

    private List<menuList> downMenuLists = new ArrayList<>();
}

 

upMenuLists, downMenuLists에 각각 데이터가 들어갈 수 있도록 구성하였다.

참고 : https://tjdguqdl.tistory.com/54

 

HTML FORM 데이터 @ModelAttribute list로 받기

VO를 사용할 때 List Type 을 사용하여 여러 FormTag를 리스트(배열)로 받는 예제이다. 한 Form 에서 전송할 때 보통은 VO 를 하나만 매칭시켜서 Controller 에서 받는다. 근데 나는 한 Form 에서 전송하고 Cont

tjdguqdl.tistory.com