@ModelAttribute("deliveryCodes")
public List<DeliveryCode> deliveryCodes(){
List<DeliveryCode> deliveryCodes = new ArrayList<>();
deliveryCodes.add(new DeliveryCode("FAST", "빠른 배송"));
deliveryCodes.add(new DeliveryCode("NORMAL", "일반 배송"));
deliveryCodes.add(new DeliveryCode("SLOW", "느린 배송"));
return deliveryCodes;
}
아 난 솔직히 이코드 마음에 안든다.
이런 분류적인건 Enum 썼으면 좋겠다.
이건 김영한 선생님도 언급했는데, 저렇게 하면 컨트롤러를 지날 때 마다 생성하기 때문에, 따로 싱글톤 등으로 해서 쓰는 게 좋다.
<div>
<div>배송 방식</div>
<select th:field="*{deliveryCode}" class="form-select">
<option value="">==배송 방식 선택==</option>
<option th:each="deliveryCode : ${deliveryCodes}" th:value="${deliveryCode.code}"
th:text="${deliveryCode.displayName}">FAST</option>
</select>
</div>
비슷하다. 근데 좀 다른 점이, 반복문에 관한거다.
이건 내 기억 상 언급 안하시고 넘어가셨는데,
<div>
<div>상품 종류</div>
<div th:each="type : ${itemTypes}" class="form-check form-check-inline">
<input type="radio" th:field="*{itemType}" th:value="${type.name()}" class="form-check-input">
<label th:for="${#ids.prev('itemType')}" th:text="${type.description}" class="form-check-label">
BOOK
</label>
</div>
</div>
위의 반복문 같은 경우는 자식이 반복되는건데,
option의 반복문 같은 경우는 자기 자신이 반복된다.
chatGPT에게 물어보니 태그에 따라 좀 다르게 기능을 수행한다고 했다.
나라면 솔직히 통일 시키고 block을 이용 했을 것 같다.
내용에 관해선
<div>
<div>배송 방식</div>
<select th:field="*{deliveryCode}" class="form-select">
<option value="">==배송 방식 선택==</option>
<option th:each="deliveryCode : ${deliveryCodes}" th:value="${deliveryCode.code}"
th:text="${deliveryCode.displayName}">FAST</option>
</select>
</div>
그냥 CODE, 보일 이름.
일단 위에 th:object={item} 이 설정되어 있어서, *{deliveryCode}는 저 부분의 id, name, value를 일단 item.deliveryCode로 한다는 뜻이다. *가 th:object에 접근한단 뜻이다.
즉 저 부분의 값은 서버에서 form으로 넘겨받을 경우 Item의 값의 일부분이 된다.
일단 반복문으로 생성 될 때는 value, ${deliveryCodes}의 code가 값으로써 가는거고, 보여지는 텍스트는 우리가 지정한 빠른 배송 등이 된다.
@Data
@AllArgsConstructor
public class DeliveryCode {
private String code; //FAST 등
private String displayName; // 빠른배송 등
}
'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글
25. 메시지, 국제화 적용 (0) | 2023.08.27 |
---|---|
24. 메시지, 국제화 (0) | 2023.08.27 |
22. 라디오버튼 (0) | 2023.08.27 |
21. 멀티 체크박스 (0) | 2023.08.27 |
20. 단일 체크박스 (0) | 2023.08.26 |