-
스프링 부트 command 객체Spring Boot 2021. 9. 14. 22:04반응형
<form action="#" method="post" th:action="@{/boardRegister}" th:object="${boardDto}"> <label>제목</label><br> <input type="text" th:field="${boardDto.title}"/><br> <label>내용</label><br> <textarea th:field="${boardDto.content}"></textarea><br> <label>작성자</label><br> <input type="text" th:field="${boardDto.writer}"/><br><br> <input type="submit" id="boardSubmit"> </form>
이전에는 thymeleaf를 통해 뷰에서 컨트롤러로 객체를 전달하려 했다. 그런데 이렇게 하려면 boardRegister() GET 메소드의 매개변수로 BoardDto가 있어야 했다. 왜냐하면 객체가 전달되어 있어야 th:object="${boardDto}"를 수행할 수 있기 때문이다. 그래서 GET 메소드와 POST 메소드 둘 다에 매개변수가 있어야 했는데 이해하기 어려웠고 로직이 맞지 않는 것 같았다. 왜냐하면 뷰에서 컨트롤러로 전달할 때에는 Command 객체를 사용하고, 컨트롤러에서 뷰로 전달할 때에는 Model을 사용하는 걸로 알고 있었기 때문이다. 그러나 책을 천천히 읽으면서 이해할 수 있었다.
<form action="/boardRegister" method="post"> <label>제목</label><br> <input type="text" name="title"/><br> <label>내용</label><br> <textarea name="content"></textarea><br> <label>작성자</label><br> <input type="text" name="writer"/><br><br> <input type="submit" id="boardSubmit"> </form>
Command 객체는 각 엘리먼트의 name과 똑같은 set###() 함수가 있으면 알아서 넣어주는 걸 생각하지 못했다. thymeleaf를 굳이 사용할 필요가 없었던 것이다. 이로써 boardRegister의 GET 메소드에는 BoardDto 객체를 파라미터로 쓰지 않아도 오류 없이 작동했다. 주의할 점은 id 속성은 인식하지 못하고 name 속성을 인식한다는 점이다. 이는 @RequestParam의 value를 설정할 때도 마찬가지이다.
책을 처음부터 끝까지 읽지는 못하더라도 내가 알려고 하는 부분은 정독해서 확실하게 짚고 넘어가야 할 것 같다.
참고
http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788980782970
반응형'Spring Boot' 카테고리의 다른 글
spring restcontroller (0) 2021.11.13 spring boot 배포하기 (0) 2021.11.10 스프링 부트 thymeleaf id 뷰에서 컨트롤러로 받아오기 (0) 2021.09.14 스프링 부트 controller 오류 해결 (0) 2021.09.14 스프링 부트 웹 계층 구조 (1) 2021.09.09