스프링/4. 스프링 MVC-2

23. 셀렉트 버튼

sdafdq 2023. 8. 27. 04:29
@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