Spring

MVC / Thymeleaf - 스프링 통합과 폼

Dear-J 2025. 4. 8. 18:14

스프링 통합으로 추가되는 기능들

스프링의 SpringEL 문법 통합

${myBean.doSomething()}처럼 스프링 빈 호출 지원

 

편리한 폼 관리를 위한 추가 속성

>> th:object, th:field, th:errors, th:errorclass

 

폼 컴포넌트 기능

>> checkbox, radio button, List 

 

스프링의 메시지, 국제화 기능의 편리한 통합

스프링의 검증, 오류 처리 통합

스프링의 변환 서비스 통합(ConversionService)

 

 

입력 폼 처리

th:object : 커맨드 객체를 지정

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

th:field : HTML 태그의 id, name, value 속성을 자동 처리

 

th:object="${item}"

>> <form>에서 사용할 객체를 지정

 

th:field="*{itemName}"

>> *{itemName)은 선택 변수 식으로 ${item.itemName}과 같음

>> id, name, value 속성 자동 생성

 

요구사항 추가

판매 여부

>> 판매 오픈 여부

>> 체크 박스로 선택 가능

 

등록 지역

>> 서울, 부산, 제주

>> 체크 박스 다중 선택 가능

 

상품 종류

>> 도서, 식품, 기타

>> 라디오 버튼으로 하나만 선택 가능

 

배송 방식

>> 빠른 배송, 일반 배송, 느린 배송

>> 셀렉트 박스로 하나만 선택 가능

 

단일 체크 박스

체크 박스를 체크하면 HTML Form에서 open=on이라는 값이 넘어감

>> 스프링은 on이라는 문자를 true 타입으로 변환

 

체크 박스를 선택하지 않으면

>> open 이라는 필드 자체가 서버로 전송되지 않음

>> 수정의 경우에는 상황에 따라 문제가 될 수 있음

 

체크 해제를 인식하기 위한 히든 필드

<input type="hidden" name="_open" value="on"/>

히든 필드를 하나 만들어서 _open 처럼 기존 체크 박스 이름 앞에 언더스코어(_)를 붙여서 전송

>> 체크 해제했다고 인식 가능

>> 히든 필드는 항상 전송됨

>> 체크를 해제한 경우 open은 전송되지 않고 _open만 전송

>> 스프링 MVC는 체크 해제라고 판단

 

타임리프로 히든 필드 자동 처리

th:field 사용

>> HTML 생성 결과를 보면 히든 필드 부분이 자동 생성

 

타임리프의 체크 확인

checked="checked'

>> 체크 박스를 선택해서 저장하면 조회시 checked 속성이 추가됨

>> 타임리프의  th:field를 사용하면 값이 true인 경우 체크를 자동 처리

 

disabled

>> 체크 박스 선택되지 않게 함

 

멀티 체크 박스

@ModelAttribute의 특별 사용법

model.addAttribute(...)를 사용해서 데이터를 반복해서 넣어줘야 할 때

>> 컨트롤러에 있는 별도의 메서드에 적용 가능

>> 해당 컨트롤러 요청할 때 regions에서 반환한 값이 자동으로 model에 담김

 

th:for="${#ids.prev('regions')}"

반복해서 HTML 태그를 생성할 때 생성된 HTML 태그 속성에서 name은 같아도 되지만

>> id는 모두 달라야 함

>> 따라서 타임리프는 체크박스를 each 루프 안에서 반복할 때 임의로 1, 2, 3 숫자 붙여줌

 

라디오 버튼

여러 선택지중 하나를 선택할 때

ItemType.values() 사용

>> 해당 ENUM의 모든 정보를 배열로 반환

 

셀렉트 박스

여러 선택지 중 하나를 선택할 때 

 

 

 

 

 

 

 

 

 

출처 : 김영한, 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

'Spring' 카테고리의 다른 글

MVC / Validation  (0) 2025.04.10
MVC / 메시지, 국제화  (0) 2025.04.09
MVC / Thymeleaf - 기본 기능  (0) 2025.04.07
MVC / 웹 페이지 만들기  (0) 2025.04.06
MVC / 기본 기능  (0) 2025.04.04