썸네일 [Spring Boot] 레이아웃 템플릿 만들기 3.4.2 레이아웃 템플릿 만들기 파라미터로 필요한 영역을 전달해서 처리한다 = 레이아웃 전체를 하나의 페이지로 구서하고 필요한 부분을 파라미터로 전달하는 방식으로 공통의 레이아웃을 사용할 수 있습니다. HEADER CONTENT FOOTER 다음과 같은 모습으로 출력됩니다. 7/24 😂500에러 떴다! 8/2 😅 해결 역시 오타 문제였다. 오류 문구에는 라고 나와있었는데, 나는 exTemplate.html만 엄청 찾아봤다..ㅎ 하지만 layout1.html에서 오타가 있었던 것 ! fragement가 아니라 fragment 였다. 의미있는 삽질이었다고 생각하자..!
썸네일 [Spring Boot] 타임리프의 레이아웃 📚코드로 배우는 스프링 부트 웹 프로젝트를 통해 공부한 내용들을 정리해보았습니다. 타임리프의 레이아웃 기능은 크게 2가지 형태로 사용할 수 있습니다. JSP의 include와 같이 특정 부분을 외부 혹은 내부에서 가져와서 포함하는 형태 특정한 부분을 파라미터로 전달해서 내용에 포함하는 형태 3.4.1 include 방식의 처리 th:insert나 th:replace 특정한 부분을 다른 내용으로 변경할 수 있는 기능 th:replce는 기존의 내용을 완전히 "대체"하는 방식이고 th:insert는 기존 내용의 바깥쪽 태그는 그대로 유지하면서 추가되는 방식입니다. fragment1.html Part 1 Part 2 Part 3 exLayout1.html Fragment Test Layout 1 - 1 Lay..
썸네일 [Spring Boot] 링크 처리 3.2.4 링크처리 타임리프의 링크는 '@{}'를 이용합니다. 파라미터를 전달하는 상황에서 가독성 좋은 코드를 만들 수 있습니다. @GetMapping({"/ex2","/exLink"}) public void exModel(Model model){ List list = IntStream.rangeClosed(1,20).asLongStream(). mapToObj(i->{ SampleDTO dto = SampleDTO.builder().sno(i).first("First.."+i).last("Last..."+i).regTime(LocalDateTime.now()) .build(); return dto; }).collect(Collectors.toList()); model.addAttribute("list"..
썸네일 [Spring Boot] inline 속성 3.2.3 inline 속성 타임리프의 속성 중 가장 유용한 기능인 inline 속성입니다. inline 속성은 자바스크립트에서 유용합니다. @GetMapping({"/exInline"}) public String exInline(RedirectAttributes redirectAttributes){ log.info("exInline......."); SampleDTO dto = SampleDTO.builder().sno(100L).first("First...100").last("Last...100").regTime(LocalDateTime.now()).build(); redirectAttributes.addFlashAttribute("result","success"); redirectAttributes..
썸네일 [Spring Boot] 제어문 처리 3.2.2 제어문 처리 타임리프의 제어문 처리 th:if ~ unless 삼항 연산자 스타일 th:if ~ unless 실행 결과 삼항 연산자를 사용하는 방법 실행 결과 응용
썸네일 [Spring Boot] 반복문의 상태 객체 기존의 반복문에서 state : {list}를 추가하는 구문인데, 오류가 난다. 알고보니 이렇게 써서 오류가 났다. 근데 이렇게 써도 오류난다..😂 왜 때문에.. 문제의 state : ${list} 구문을 지우면, 정상적으로 조회되는데, 해당 구문을 추가하면 오류가 난다 ! 해결 ^^ state 가 변수명인데 변수명.index가 아니라 list.index로 접근해서 500에러가 떴던 것이었다. list라는 이름의 변수가 없는데 null.index에 접근하려고 했고, 당연히 null은 파싱할 수 없어서 다음과 같은 오류가 떴던 것 같다. An error happened during template parsing (template: "class path resource [templates/sample/ex2..
썸네일 [Spring Boot] Thymeleaf의 기본 사용법 📚코드로 배우는 스프링 부트 웹 프로젝트를 통해 공부한 내용들을 정리해보았습니다. 88p-90p 타임리프는 JSP를 사용해본 경험이 있다면 어려움 없이 적응이 가능하다는 장점이 있습니다. Lombok의 @Data는 Getter/Setter,toString(), equals(),hashCode()를 자동을 생성합니다. @Data @Builder(toBuilder = true) public class SampleDTO { private Long sno; private String first; private String last; private LocalDateTime regTime; } @GetMapping의 value 속성값을 '{}'로 처리하면 하나 이상의 URL을 지정할 수 있습니다. @GetMappi..
썸네일 [Spring Boot] 스프링 MVC와 Thymeleaf | 포트 번호 바꾸기 | 404 에러 해결 📚코드로 배우는 스프링 부트 웹 프로젝트를 통해 공부한 내용들을 정리해보았습니다. 82p -88p 스프링 부트는 설정을 통해서 JSP등을 사용할 수도 있지만, JSP 대신에 Thymeleaf이나 FreeMarker,Mustache등을 이용해서 화면을 처리합니다. Thymeleaf(타임리프)를 이용하는 이유 JSP와 유사하게 ${}을 별도의 처리 없이 이용할 수 있습니다. Model에 담긴 객체를 화면에서 JavaScript로 처리하기 편리합니다. 연산이나 포맷과 관련된 기능을 추가적인 개발 없이 지원합니다 개발 도구를 이용할 때 .html 파일로 생성하는데 문제가 없고 별도의 확장자를 이용하지 않습니다. 3.1 타임리프를 사용하는 프로젝트 생성 83p 참고 타임리프를 이용하는 프로젝트는 변경 후에 만들어..
썸네일 [Spring Boot] @Query 어노테이션 📚코드로 배우는 스프링 부트 웹 프로젝트를 통해 공부한 내용들을 정리해보았습니다. 78p - 81p @Query 어노테이션 일반적인 경우에는 간단한 처리만 쿼리메서드를 이용하고, @Query를 이용하는 경우가 더 많습니다. @Query의 경우 메소드의 이름과 상관없이, 메서드에 추가한 어노테이션을 통해서 원하는 처리가 가능합니다. @Query의 value는 JPQL(Java Persistence Query Language)로 작성하는데 흔히 객체 지향 쿼리라고 불리는 구문들입니다. @Query로 할 수 있는 일 필요한 데이터만 선별적으로 추출하는 기능 데이터베이스에 맞는 순수한 SQL (Native SQL)을 사용하는 기능 insert,update,delete와 같은 select가 아닌 DML을 처리하는..
썸네일 [Spring Boot] 쿼리 메서드와 Pageable의 결합 📚코드로 배우는 스프링 부트 웹 프로젝트를 통해 공부한 내용들을 정리해보았습니다. 74p - 78p 쿼리 메서드와 Pageable의 결합 MemoRepository 인터페이스의 변경 public interface MemoRepository extends JpaRepository { List findByMnoBetweenOrderByMnoDesc(Long from, Long to); Page findeByMnoBetween(Long from, Long to, Pageable pageable); } 정렬 조건은 Pageable을 통해서 조절할 수 있습니다. Pageable 파라미터는 모든 쿼리 메소드에 적용 가능합니다. 일반적인 경우 쿼리 메서드에 정렬 조건을 생략하고 만드는 경우가 많습니다. MemoRep..