Springあるある

input 태그 속에 th:field와 th:value가 동시에 있는 경우

JIN_YOUNG _KIM 2025. 1. 10. 19:09

public enum ItemType {


    Book("도서"),
    Food("음식"),
    ETC("기타");

    private final String description;

    ItemType(String description) {

        this.description = description;

    }

    public String getDescription(){
        return description;
    }

}
@Data
public class Item {
    private Long id;
    private String itemName;
    private Integer price;
    private Integer quantity;

    private Boolean open; // 판매 여부
    private List<String> regions; // 판매 지역
    private ItemType itemType; //  상품 종류
    private String deliveryCode; // 배송 방식
    public Item() {


    }

    public Item(String itemName, Integer price, Integer quantity) {
        this.itemName = itemName;
        this.price = price;
        this.quantity = quantity;
    }
}

@Controller
@RequestMapping("/form/items")
@RequiredArgsConstructor
public class FormItemController {

    private final ItemRepository itemRepository;

    @ModelAttribute("regions")
    public Map<String,String> regions(){

        LinkedHashMap<String, String> regions = new LinkedHashMap<>();
        regions.put("SEOUL","서울");
        regions.put("BUSAN","부산");
        regions.put("JEJU","제주");

        return regions;
    }

    @ModelAttribute("itemTypes")
    public ItemType[] itemTypes(){

        ItemType[] values = ItemType.values(); // Enum에 정의된 모든 정보를 배열로 반환!

        return values;
    }

    @GetMapping
    public String items(Model model) {
        List<Item> items = itemRepository.findAll();
        model.addAttribute("items", items);
        return "form/items";
    }

 

Model 객체에 itemTypes라는 배열형이 들어 가 있다(즉, ItemType[]이 들어 가 있으며, ItemType은 Enum 형이다. 

이 배열 안에 Enum 클래스에서 정의한 모든 정보가 들어가 있다)

th:value = type.name(ItemType[]에 들어 있는 enum 정보를 반복문을 돌면서 하나씩 뱉어 낸다.)이 뱉어 내는 데이터와

 th:field=item.itemType이 뱉어 내는 데이터가 일치하면 input 태그 안에 checked="checked"를 넣어 주어서 활성화 시키고

일치하지 않으면 해당 라이도 버튼은 활성화 되지 x. 

=> 위 조건 분기 작업은 타임리프에서 지원하는 기능이다. 이 기능을 만약 개발자가 짠다면 매우 복잡해 지며 어렵다. 

타임리프는 radio 타입 뿐 아니라 checkbox와 selectbox에도 똑같은 기능을 자동 지원한다.