Spring
-
[김영한 스프링] 14. 타임리프 스프링 통합과 폼 - 라디오 버튼 & 셀렉트 박스Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 8. 25. 02:55
라디오 버튼 라디오 버튼은 여러 선택지 중에 하나를 선택할 때 사용할 수 있다. 이번시간에는 라디오 버튼을 자바 ENUM을 활용해서 개발해 보자. 상품 종류 도서, 식품, 기타 라디오 버튼으로 하나만 선택할 수 있다. FormItemController - 추가 @ModelAttribute("itemTypes") public ItemType[] itemTypes() { ItemType[] values = ItemType.values(); return values; } itemTypes를 등록 폼, 조회, 수정 폼에서 모두 사용하므로 @ModelAttribute의 특별한 사용법을 적용하자. ItemType.values()를 사용하면 해당 ENUM의 모든 정보를 배열로 반환한다. 예) [BOOK, FOOD, ..
-
[김영한 스프링] 13. 타임리프 스프링 통합과 폼 - 멀티 체크 박스Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 8. 23. 04:17
체크 박스 - 멀티 체크 박스를 멀티로 사용해서, 하나 이상을 체크할 수 있도록 해보자 등록 지역 서울, 부산, 제주 체크 박스로 다중 선택할 수 있다 FormItemController - 추가 Map에 지역을 넣는 코드가 중복 입력 됨 스프링이 공통으로 model에 담도록 기능 제공함(아래 코드) @ModelAttribute("regions") public Map regions() { Map regions = new LinkedHashMap(); regions.put("SEOUL", "서울"); regions.put("BUSAN", "부산"); regions.put("JEJU", "제주"); return regions; } @ModelAttribute의 특별한 사용법 등록 폼, 상세화면, 수정 폼에서 ..
-
[김영한 스프링] 12. 타임리프 스프링 통합과 폼 - 단일 체크 박스Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 8. 22. 23:09
체크 박스 - 단일1 단순 HTML 체크 박스 addForm.html 판매 여부 판매 오픈 FormItemController 추가 log.info("item.open={}", item.getOpen()); @Slf4j 애노테이션 추가 실행 체크 박스를 체크하면 HTML Form에서 open=on이라는 값이 넘어간다. 스프링은 on이라는 문자를 true타입으로 변환해 준다. (스프링 타입 컨버터가 이 기능을 수행하는데, 뒤에서 설명한다.) 결과 주의 - 체크 박스를 선택하지 않을 때 HTML에서 체크 박스를 선택하지 않고 폼을 전송하면 open이라는 필드 자체가 서버로 전송되지 않는다. HTTP 요청 메시지 로깅 logging.level.org.apache.coyote.http11=debug applica..
-
[김영한 스프링] 11. 타임리프 스프링 통합과 폼 - 입력 폼 처리 & 요구사항 추가Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 8. 21. 22:33
입력 폼 처리 타임리프가 제공하는 입력 폼 기능을 적용해서 기존 프로젝트의 폼 코드를 타임리프가 지원하는 기능을 사용해서 효율적으로 개선해 보자. th:object : 커맨드 객체를 지정한다. *{...} : 선택 변수 식이라고 한다. th:object에서 선택한 객체에 접근한다. th:field HTML 태그의 id, name, value 속성을 자동으로 처리해 준다. 렌더링 전 렌더링 후 등록 폼 th:object를 적용하려면 먼저 해당 오브젝트 정보를 넘겨주어야 한다. 등록 폼이기 때문에 데이터가 비어있는 빈 오브젝트를 만들어서 뷰에 전달하자. FormItemController 변경 @GetMapping("/add") public String addForm(Model model) { model.ad..
-
[김영한 스프링] 10. 타임리프 스프링 통합과 폼 - 프로젝트 설정 & 타임리프 스프링 통합Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 8. 21. 21:33
프로젝트 설정 이름 변경 다운로드한 파일 중 "form-start"를 원하는 곳으로 이동 후 "form"으로 이름변경 프로젝트 열기 build.gradle 열기 실행 ItemServiceApplication 실행 결과 타임리프 스프링 통합 기본 메뉴얼: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html 스프링 통합 메뉴얼: https://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html 스프링 통합으로 추가되는 기능들 스프링의 SpringEL 문법 통합 ${@myBean.doSomething()}처럼 스프링 빈 호출 지원 편리한 폼 관리를 위한 추가 속성 th:object (기능 강화, 폼..
-
[김영한 스프링] 09. 타임리프 기본 기능 - 템플릿 조각 & 템플릿 레이아웃Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 8. 12. 00:45
템플릿 조각 웹 페이지를 개발할 때는 공통 영역이 많이 있다. 예를 들어서 상단 영역이나 하단 영역, 좌측 카테고리 등등 여러 페이지에서 함께 사용하는 영역들이 있다. 이런 부분을 코드를 복사해서 사용한다면 변경 시 여러 페이지를 다 수정해야 하므로 상당히 비효율 적이다. 타임리프는 이런 문제를 해결하기 위해 템플릿 조각과 레이아웃 기능을 지원한다. TemplateController package hello.thymeleaf.basic; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annota..
-
[김영한 스프링] 08. 타임리프 기본 기능 - 자바스크립트 인라인Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 8. 11. 22:43
자바스크립트 인라인 타임리프는 자바스크립트에서 타임리프를 편리하게 사용할 수 있는 자바스크립트 인라인 기능을 제공한다. 자바스크립트 인라인 기능은 다음과 같이 적용하면 된다. main/resources/templates/basic/javascript.html 생성 텍스트 렌더링 var username = [[${user.username}]]; 인라인 사용 전 -> var username = userA; 인라인 사용 후 -> var username = "userA"; 인라인 사용 전 렌더링 결과를 보면 userA라는 변수 이름이 그대로 남아있다. 타임리프 입장에서는 정확하게 렌더링 한 것이지만 아마 개발자가 기대한 것은 다음과 같은 "userA"라는 문자일 것이다. 결과적으로 userA가 변수명으로 사용되..
-
[김영한 스프링] 07. 타임리프 기본 기능 - 조건부 평가 & 주석 & 블록Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 8. 11. 21:09
조건부 평가 타임리프의 조건식 if, unless (if의 반대) BasicController 추가 @GetMapping("/condition") public String condition(Model model) { addUsers(model); return "basic/condition"; } condition.html if, unless count username age 1 username 0 switch count username age 1 username 10살 20살 기타 main/resources/templates/basic/condition.html 생성 if, unless 타임리프는 해당 조건이 맞지 않으면 태그 자체를 렌더링 하지 않는다. 만약 다음 조건이 false인 경우 ... 부분 ..