📒 [실전! 스프링 부트와 JPA 활용 - 김영한] 프로젝트를 완성한 후 부족한 기능을 개선한 후 정리하는 글입니다.
Book
) 유형에 해당하는 상품 유형 1개만 등록이 가능한 상태에서 앨범(Album
)과 영화(Movie
) 상품 유형을 추가로 등록할 수 있도록 수정한 시도가 있었습니다. 🧷 참고Book
) 유형에 해당하는 상품을 등록하기 위한 createBookForm.html
Album
) 유형에 해당하는 상품을 등록하기 위한 createAlbumForm.html
Movie
) 유형에 해당하는 상품을 등록하기 위한 createMovieForm.html
Form
3개를 복사 붙여넣기를 통해 주먹구구식으로 해결했지만, 이것은 분명 좋지 않은 개발 상태임을 개발 호소인으로서 직감하였지만 해결 방법이 떠오르지 않아서 일단 남겨두기로 하였습니다.BootStrap
의 Docs에서 컴포넌트를 확인하던 중 아코디언
을 발견하였습니다.📒 BootStrap Docs의 Accordion을 참고하여 작성하였습니다.
<div class="accordion-body">
의 CONTENT 부분에 각 상품의 createForm 을 작성하였습니다.<div class="accordion" id="accordionExample">
<div class="accordion-item">
<h2 class="accordion-header" id="headingOne">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
Accordion Item #1
</button>
</h2>
<div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
<div class="accordion-body">
CONTET
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="headingTwo">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
Accordion Item #2
</button>
</h2>
<div id="collapseTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo" data-bs-parent="#accordionExample">
<div class="accordion-body">
CONTET
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="headingThree">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
Accordion Item #3
</button>
</h2>
<div id="collapseThree" class="accordion-collapse collapse" aria-labelledby="headingThree" data-bs-parent="#accordionExample">
<div class="accordion-body">
CONTET
</div>
</div>
</div>
</div>
createOOOOForm.html
파일을 모두 제거하였습니다.Controller
에서도 각 상품 별로 존재하던 GetMapping
코드 모두 제거하였습니다.GetMapping
으로 모든 모든 상품을 등록할 수 있도록 수정하였습니다.@GetMapping("/items/new")
public String createBookForm(Model model){
model.addAttribute("albumForm", new AlbumForm());
model.addAttribute("bookForm", new BookForm());
model.addAttribute("movieForm", new MovieForm());
return "items/createItemForm";
}
model
에 3개의 Form
Attribute를 추가하는 이유는 3개의 상품 중 어떤 상품이 등록될지 모르기 때문에 모든 상품의 Form
을 추가하였습니다.SpringBoot
혹은 ThyemeLeaf
로 해결해야 한다는 생각이 무의식 중에 있었던 것 같다.