@PathVariable
URI에 변수를 넣고 싶을 때 사용한다. 사용방법은 매우 다양
model.addAtribute
view에 담을 데이터를 담는 공간, 이것도 방식이 많다. 그중 가장 내 기준에 직관적인 것을 사용하였다.
Model addAttribute(String attributeName, @Nullable Object attributeValue);
첫 번째 파라미터인 attributeName는 view 페이지, 다시 말해 html에 해당 string이 있어야 한다.
두 번째 파라미터 attributeValue는 메소드내에 있어야 한다.
//MemberController
@PostMapping("form")
public String addMember(Member member, Model model) {
Member savedMember = memberRepository.save(member);
model.addAttribute("member", savedMember);
return "selectClass";
}
@GetMapping("form/warrior/id={memberId}")
public String selectWarrior(@PathVariable(name ="memberId") Long memberId, Model model) {
Member member = memberRepository.findById(memberId);
memberService.pickClass(member, ClassType.Warrior);
//뷰에 보낼 데이터
model.addAttribute("member", member);
return "member";
}
//selectClass.html
<div class="col">
<button class="w-100 btn btn-primary btn-lg"
th:onclick="|location.href='@{/form/warrior/id={memberId}(memberId=${member.id})}'|"
type="button">Warrior</button>
</div>
SelectClass.html
위 페이지는 유저이름을 설정한 뒤다. 유저 이름을 설정하면 아래 포스트매핑 매서드로 인해 뷰에 데이터가 전달된다.
@PostMapping("form")
public String addMember(Member member, Model model) {
Member savedMember = memberRepository.save(member);
model.addAttribute("member", savedMember);
return "selectClass";
}
그 결과 SelectClass 타임리프 문법 내 변수였던 memberId가 결정된다. 그래서 warrior라는 버튼을 클릭하면
http://localhost:8080/form/warrior/id=4 URI로 이동하게 되고 아래 메소드가 수행된다.
@GetMapping("form/warrior/id={memberId}")
public String selectWarrior(@PathVariable(name ="memberId") Long memberId, Model model) {
Member member = memberRepository.findById(memberId);
memberService.pickClass(member, ClassType.Warrior);
model.addAttribute("member", member);
return "member";
}
이 메소드가 수행됨에 따라 아래 페이지가 보이게 된다.
'WEB' 카테고리의 다른 글
그런 REST API로 괜찮은가 정리 아닌 정리 (0) | 2023.03.27 |
---|---|
세션/쿠키/토큰 (0) | 2022.05.10 |
form 태그의 action 속성 (0) | 2022.05.02 |
조회 대상 빈이 2개 이상일 때 해결 방법 - @Autowired 필드 명 변경/@Qualifier/@Primary (0) | 2022.04.27 |
@PathVariable 애노테이션 등 (0) | 2022.04.20 |