샐님
2023. 7. 18. 17:35
728x90
반응형
1. Item 도메인에 체크를 하고 난 뒤 담길 필드를 추가합니다.
package shoppingproject.shop.domain.item;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import org.springframework.web.bind.annotation.ModelAttribute;
import shoppingproject.shop.domain.common.BaseEntity;
import shoppingproject.shop.domain.common.UploadFile;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Getter
@Setter
public class Item extends BaseEntity {
private Long Id;
private String ItemName;
private Integer Price;
private String Description;
private List<UploadFile> imageFiles;
private List<String> sizeList; // 체크박스가 담길 필드추가
private List<String> colorList; // 체크박스가 담길 필드추가
}
2. Controller 에 color, size 의 컬렉션을 생성합니다.
이때 @ModelAttribute("colors") 를 추가하면 해당 컨트롤러에서 사용가능하고 이렇게 담긴 데이터는 화면에서 사용가능합니다.
@ModelAttribute("colors")
public Map<String, String> Colors() {
Map<String, String> colors = new LinkedHashMap<>();
colors.put("red","red");
colors.put("yellow","yellow");
colors.put("blue","blue");
colors.put("black","black");
colors.put("white","white");
return colors;
}
@ModelAttribute("sizes")
public Map<String, String> sizes() {
Map<String, String> sizes = new LinkedHashMap<>();
sizes.put("s","s");
sizes.put("m","m");
sizes.put("l","l");
return sizes;
}
3. 화면에 적용
<div class="form-group col-md-6 mb-3">
<label for="Description" >상품 색상</label>
<div th:each="color : ${colors}" class="form-check form-check-inline">
<input type="checkbox" th:field="*{colorList}" th:value="${color.key}" class="form-check-input">
<label th:for="${#ids.prev('colors')}" th:text="${color.value}" class="form-check-label"></label>
</div>
</div>
1) th:for="${#ids.prev('colors')}" : each 루프 안에서 반복해서 만들 때 임의로 1 , 2 , 3 숫자를 뒤에 붙여준다.
(나는 적용이 안되서 일단 빼고 조금더 찾아봐야겟다.)
2) th:each="color : ${colors}" : ${colors} 는 컨트롤러에서 @modelAttribute에서 추가한 데이터를 뿌려준다.
3) th:field=*{colorList} : item 객체의 colorList의 필드이며 선택된 데이터를 여기에 담아준다.
4) th:value="${color.key}" : color의 키값을 담아준다.
5) th:text=${color.value} : color의 값을 표시한다.
잘 나오는 것을 확인할 수 있다.
728x90
반응형