목록프로그래밍/thymeleaf (6)
쌓고 쌓다
기존에 로그인 여부에 따라 헤더를 달리 바꾸기 위해서 Controller에서 아래와 같이 코드를 작성했다. @GetMapping("/") public String home(@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { if (loginMember == null) { model.addAttribute("isLogin", false); } else { model.addAttribute("isLogin", true); model.addAttribute("member", loginMember); } return "home"; } isLogin으로 로그인 여부를 관리했었다...
기존 템플릿 조각을 불러와서불러와서 매번 조각을 부르는 코드를 작성하기에는 효율적이지 않다. 공통적인 영역을 사용하는데 매번 코드를 작성하는 것 보단. 공통적인 영역을 만들어 놓고. 바뀌는 부분(컨텐츠)에만 코드를 집어 넣는것이 좋은 방법이다. defaultLayout.html 헤더(navigation var) 레이아웃 컨텐츠 로그인 여부에 따라 헤더 부분만 달리하길 원하기에 헤더 부분의 코드는 템플릿 조각인 "headerFragment"를 가져오기로 작성했다. 또한 다른 페이지에서 보내온 컨텐츠는 content로 받아 replace를 한다. fragment와 replace 사용 방법에 대한 과정은 앞선 게시글에서 설명했으므로 과정에 대해서만 알아보자. 에 th:fragment 속성을 가진다. 이 def..
목표 기능 html을 보여주는데 로그인 여부에 따라 일부 태그만 교체하길 원한다. 먼저 아래와 같이 세션을 통해 "LOGIN_MEMBER" 세션이 존재에 따라 상단 바를 달리하길 원한다. 로그인한 사람을 위한 상단 바를, 게스트라면 게스트 바를 replace 해보자. HomeController @GetMapping("/") public String home(@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { if (loginMember == null) { model.addAttribute("isLogin", false); } else { model.addAttribute..
@Data public class Item { private List regions; //등록 지역 } 아이템 클래스의 등록 지역(ex. 부산, 서울)을 가지는 필드가 있다. 이 필드를 다중 체크 박스를 통해 값을 넣어보자. @ModelAttribute("regions") public Map regions() { Map regions = new LinkedHashMap(); // HashMap은 순서가 보장안되나 LinkedHashMap은 보장됨 regions.put("SEOUL", "서울"); regions.put("BUSAN", "부산"); regions.put("JEJU", "제주"); return regions; } 컨트롤러에 @ModelAttribute를 메서드에 사용하여 어떤 메서드를 호출하더..
Item에 true, false 값을 관리하는 필드가 있다. @Data public class Item { private Boolean open; //오픈 여부 } 아래처럼 순수 HTML로 체크박스를 만들고 POST 요청을 보내면 문제가 있다. 체크박스를 선택한 경우에는 HTML Form에서 open=on이 넘어온다. 이 값은 스프링에서 true로 타입 변환이 이뤄지진다. 선택하지 않은 경우에는 서버에 null 값이 넘어온다. 자세히는 name="open" 값이 전혀 존재하지 않은 상태이다. 체크 박스 미선택 문제를 스프링MVC와 히든 필드로 해결할 수 있다. (미선택시 false, 선택시 true가 넘어오게) 어떻게 name="open"과 name="_open"으로 해결한다는걸까? 체크박스 선택시 op..
등록 폼 먼저 등록 폼의 html을 응답할때 모델에 빈 객체를 담아서 넘겨주자. th:object 사용을 위해 빈 오브젝트를 넘겨줄 필요가 있다. @GetMapping("/add") public String addForm(Model model) { model.addAttribute("item", new Item()); return "form/addForm"; } 넘어온 객체는 아래와 같이 타임리프를 사용하여 편리하게 사용할 수 있다. th:object="${item}"으로 넘어온 객체를 받는다. th:field는 HTML 태그인 id, name, value 속성을 자동으로 생성해준다. *{...}는 선택 변수 식이라고 th:object에서 선택한 객체에 대해 필드 접근한다. 위의 input 태그는 렌더링..