728x90
@ModelAttribute("itemTypes")
public ItemType[] itemTypes(){
return ItemType.values(); //Enum의 모든 정보를 받을수 있다
}
<!-- radio button -->
<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>
<!-- radio button -->
<div>
<div>상품 종류</div>
<div th:each="type : ${itemTypes}" class="form-check form-check-inline">
<input type="radio" th:field="${item.itemType}" th:value="${type.name()}"
class="form-check-input" disabled>
<label th:for="${#ids.prev('itemType')}" th:text="${type.description}"
class="form-check-label">
BOOK
</label>
</div>
</div>
- ItemType.values()를 사용하면 해당 ENUM의 모든 정보를 배열로 반환한다.
- 체크 박스는 수정시 체크를 해제하면 아무 값도 넘어가지 않기 때문에, 별도의 히든 필드로 이런 문제를 해결했다.
- 라디오 버튼은 이미 선택이 되어 있다면, 수정 시에도 항상 하나를 선택하도록 되어 있으므로 체크 박스와 달리 별도의 히든 필드를 사용할 필요가 없다.
타임리프에서 ENUM 직접 사용하기
<div th:each="type : ${T(hello.itemservice.domain.item.ItemType).values()}">
- 스프링EL 문법으로 ENUM을 직접 사용할 수 있다. ENUM에 values()를 호출하면 해당 ENUM의 모든 정보가 배열로 반환된다
- 그런데 이렇게 사용하면 ENUM의 패키지 위치가 변경되거나 할때 자바 컴파일러가 타임리프까지 컴파일 오류를 잡을 수 없으므로 추천하지는 않는다.
728x90
'스프링 MVC 2편(백엔드 웹 개발 활용 기술)' 카테고리의 다른 글
| Ch03. 메시지, 국제화 - 스프링 메시지 소스 설정 (0) | 2022.03.13 |
|---|---|
| Ch02. 타임리프(스프링 통합과 폼) - 셀렉트 박스 (0) | 2022.03.11 |
| Ch02. 타임리프(스프링 통합과 폼) - 체크 박스(멀티) (0) | 2022.03.11 |
| Ch02. 타임리프(스프링 통합과 폼) - 체크박스(단일) (0) | 2022.03.11 |
| Ch02. 타임리프(스프링 통합과 폼) - 요구사항 추가 (0) | 2022.03.11 |