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
'Web > Spring & Spring boot' 카테고리의 다른 글
[spring boot] 다중 쿼리 사용 List update 하기 (0) | 2024.12.16 |
---|---|
[spring boot] 이미지 및 파일 첨부 (0) | 2024.12.15 |
[spring boot] 리눅스 배포 (0) | 2024.12.15 |
[spring boot] 네이버 클라우드 sms 기능 활용하기 (0) | 2024.10.30 |
Mybatis 데이터가 null로 오는 문제 (0) | 2023.08.05 |