[Thymeleaf] th:object - th:field

HSRyuuu dev blog·2023년 4월 1일
0

타임리프(Thymeleaf)

목록 보기
8/9

th:object - th:field

th:object - th:field 를 이용해서 객체를 다룰때 중복되는 부분을 줄일 수 있다.

th:object : 커맨드 객체를 지정한다.

*{…} : 선택변수 식 → th:object에서 선택한 객체에 접근한다.

th:field : html 태그의 id, name, value 속성을 자동으로 처리해준다.

(예제 - 변경 전)

<form action="item.html" th:action method="post">
	<div>
		<label for="itemName">상품명</label>
		<input type="text" id="itemName" name="itemName" 
               class="form-control" placeholder="이름을 입력하세요">
	</div>
</form>

(변경 후)

  1. th:object="${item}" 를 추가한다.
  2. id, name, value 속성을 지우고, th:field="*{itemName}" 를 추가한다.
  3. 이 때, for="xxx"th:field="*{xxx}"을 맞춰야 한다.

    아래 예제에서 id 속성도 삭제할 수 있다. 그러나 id 속성을 삭제하면 IDE에서 인식하지 못해서 오류처럼 보인다. 따라서 id="itemName" 속성은 써주는 것이 마음이 편해서 그렇게 했다.

<form action="item.html" th:object="${item}" th:action  method="post">
	<div>
		<label for="itemName">상품명</label>
		<input type="text" id="itemName" th:field="*{itemName}" 
               class="form-control" placeholder="이름을 입력하세요">
	</div>
</form>

Controller설정

th:object 를 사용하려면 해당 오브젝트 정보를 넘겨줘야 한다.
비어있는 오브젝트를 만들어서 model에 담아, 뷰에 전달해야 한다.

(예제 - 변경 전)

	@GetMapping("/add")
    public String addForm(){
        return "form/addForm";
    }

(변경 후)

  • model을 뷰에 넘겨주는것으로 변경했다.
	@GetMapping("/add")
    public String addForm(Model model){
        model.addAttribute("item",new Item());
        return "form/addForm";
    }

(참고)김영한님 인프런 Spring MVC-2
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2

profile
Exciting dev life / 댓글, 피드백, 질문 환영합니다 !!!

0개의 댓글