@ModelAttribute 관련 static 처리와 th:field 부분 질문드립니다
[질문 내용]
안녕하십니까 강의 정말 잘 듣고 있습니다. 두 가지 질문 드리려고 하는데요!
5분 50초 경에
@ModelAttribute("regions")
public Map<String, String> regions() {
Map<String, String> regions = new LinkedHashMap<>();
regions.put("SEOUL", "서울");
..
return regions;
} 부분 설명해주시면서 별도의 메서드마다 별도로 처리하는 것보다는 static으로 처리를 하면 더 좋다는 설명을 해주셨습니다. static으로 처리하는 것의 예시가 궁금합니다. 어떻게 처리를 해야할지 감이 잘 안와서요!! ㅎㅎ ㅠ
<!-- multi checkbox -->
<input type="checkbox" th:field="*{regions}" th:value="${region.key}" class="form-check-input">th:field="*{regions}" 와 th:value="${region.key}" 의 값을 비교해서 checked 설정을 해준다는 설명 부분이 이해가 잘안갑니다..ㅠ th:field="*{regions}" 를 적용했을 때 id 값과 name값 value값을 편리하게 설정해준다는 개념만 이해가 되는데 사용자가 항목을 체크하면 th:field="*{reigons}" 에 어떤 값들이 들어가는것인지 , 어떻게 비교를 하는 것인지 잘 모르겠습니다...
감사합니다..!
답변 1
2
안녕하세요. s2사랑해요s2김영한s2님 🙂
다음과 같이 처리하시면 됩니다.
public abstract class Regions {
private static final Map<String, String> regions = new LinkedHashMap<>();
static {
regions.put("SEOUL", "서울");
regions.put("BUSAN", "부산");
regions.put("JEJU", "제주");
}
public static Map<String, String> getRegions() {
return regions;
}
}
//컨트롤러
@ModelAttribute("regions")
public Map<String, String> regions() {
return Regions.getRegions();
}관련 코드가 잘 이해되지 않으면 자바의 static에 대해서 학습하셔야 합니다.
2번의 경우 다음 코드를 통해서 생성된 코드를 웹브라우저에서 소스코드 보기를 해보시면 확인할 수 있습니다.
<input type="checkbox" th:field="*{regions}" th:value="${region.key}"
class="form-check-input">
생성된 코드
<!-- multi checkbox -->
<div>
<div>등록 지역</div>
<div class="form-check form-check-inline">
<input type="checkbox" value="SEOUL" class="form-check-input" id="regions1" name="regions" checked="checked"><input type="hidden" name="_regions" value="on"/>
<label for="regions1"
class="form-check-label">서울</label>
</div>
<div class="form-check form-check-inline">
<input type="checkbox" value="BUSAN" class="form-check-input" id="regions2" name="regions"><input type="hidden" name="_regions" value="on"/>
<label for="regions2"
class="form-check-label">부산</label>
</div>
<div class="form-check form-check-inline">
<input type="checkbox" value="JEJU" class="form-check-input" id="regions3" name="regions"><input type="hidden" name="_regions" value="on"/>
<label for="regions3"
class="form-check-label">제주</label>
</div>
</div>
th:field="*{regions}"
이 코드는 Item에 있는 regions를 사용합니다.
public class Item {
private Long id;
private String itemName;
private Integer price;
private Integer quantity;
private Boolean open; //판매 여부
private List<String> regions; //등록 지역
}
th:value="${region.key}"
이 코드는 타임리프에서 해당 코드 바로 위에서 반복하는 <div th:each="region : ${regions}">에 있는 region을 뜻합니다. 즉 다음 코드를 뜻합니다.
@ModelAttribute("regions")
public Map<String, String> regions() {
Map<String, String> regions = new LinkedHashMap<>();
regions.put("SEOUL", "서울");
regions.put("BUSAN", "부산");
regions.put("JEJU", "제주");
return regions;
}
결과적으로 @ModelAttribute에서 다음 regions가 반복하면서 출력됩니다.
그 중에 Item.regions의 값과, @ModelAttribute에 있는 regions에 있는 key가 같으면 HTML에서 checked가 들어갑니다. 화면에는 체크 표기가 되어 보이는 것이지요.
감사합니다.
2
자세한 설명 진심으로 감사드립니다. 1번은 정말 잘 이해가 되었습니다!!
2번 질문에서 추가로 질문드리고 싶은데..
th:field="*{regions}" 이 값이 item에 있는 regions를 사용한다는 것을 알고,
th:value="${region.key}" 이 코드는 <div th:each="region : ${regions}">에 있는 region을 뜻하는 것도 알겠습니다.
그런데 둘을 비교하는 부분이 이해가 가질 않습니다 강사님!! TT
사용자가 체크박스 항목을 체크를 하면 items에 있는 regions에 값이 들어가고 이 값과 모델에 들어있는 regions 값을 비교해서 checked 속성이 checked로 바뀌는 것인가요?
이미지 업로드와 db 트랜잭션 묶는법
0
43
1
Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4
0
53
2
MessageSourceTest 코드
0
48
1
인터셉터 에러 설정
0
48
1
resolveArgument()메서드 질문
0
57
1
43강 검증1 에서 실패 로직 관련 질문있습니다.
0
57
2
타임리프 3.X 버전 rendering, serializer 에러 해결 방법
2
133
3
스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ
0
90
3
pdf 오타 문의
0
57
1
ItemUpdateForm 검증 관련 질문입니다.
0
49
1
22page 링크 주소 변경
0
59
2
특정 데이터와 파일을 함께 저장 시, 테이블 구조 질문
0
53
1
섹션3번 수업에 대한 질문입니다.
0
80
2
@Autowired 보다 더 좋은 방법이 어떤 걸까요?
0
85
2
타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.
0
65
1
자바스크립트 인라인에서 객체 직렬화 시 오류가 납니다
0
142
3
스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문
0
63
1
톰캣 에러 페이지가 안보입니다.
0
104
2
apiEceptionController에서 센드 에러 호출하면 안되는지?
0
81
1
세션 타임아웃시 쿠키 삭제 방법이 없나요?
0
118
2
ApiExceptionController 질문드립니다.
0
64
1
셀렉박스 챕터에서 option value에 ==배송 방식 선택== 이것을 넣은 이유가 궁금함, 이렇게 구상해도 되는지?
0
66
1
MemberRepository 필드의 fianl 선언 유무
0
85
2
혹시 index.html 에서는 fragment 사용이 안되는건가요
0
58
1





