Thymeleaf 6

Validation

폼 입력으로 들어오는 데이터를 검증하고 만약 오류가 발생했을 때 오류 페이지를 보여주는 것이 아닌 입력한 데이터를 유지한 상태로 어떤 오류가 발생했는지 고객에게 알려주어야한다. 컨트롤러의 중요한 역할 중 하나는 HTTP 요청이 정상인지를 검증하는 것이다. 클라이언트 검증은 조작이 가능하다. ==> 보안에 취약 그렇다고 서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다. 둘을 적절히 섞어서 사용해야함. API 방식을 사용해서 검증 오류를 API 응답 결과에 남겨주는 것도 좋은 방법 1. 검증 직접 처리 서버에서 검증 실패가 발생하면 Form에 입력된 데이터와 검증 오류에 대한 결과를 Model에 담아 다시 상품 등록 Form으로 보내준다. 이런 오류 페이지가 띄워지는 것이 아닌 입력한 데이터는 그대로..

Spring/Spring MVC 2021.07.07

Thymeleaf 파헤치기

Tymeleaf 기본 기능 1. 텍스트 - text, utext Controller에서 매핑하는 과정이나 model에 값을 담는 과정은 생략 일반적으로 태그 내부에서 th:text를 사용하는 방식을 많이 사용하고 태그 내부에서 사용하는 것이 아니라 컨텐츠 안에서 직접 출력을 하고 싶을 때는 위와 같이 [[...]] 대괄호 사이에 모델에 담긴 값을 넣어준다. 참고 : Escape HTML 문서는 같은 특수 문자를 기반으로 정의된다. 따라서 뷰 템플릿으로 HTML 화면을 생성할 때는 출력하는 데이터에 이러한 특수 문자가 있는 것을 주의해서 사용해야 한다. 태그를 사용하여 문자를 강조하고 싶어 위와 같이 코드를 작성하였다면 어떻게 될까? 의도와는 달리 태그가 적용되지 않고 그대로 출력되는 것을 확인..

Spring/Spring MVC 2021.07.01

조회수 기능, 페이징, 정렬

현재 게시물 CRUD 기능은 구현이 되어있는 상태이다. 스프링 데이터 JPA를 사용하여 굉장히 편리하게 구현하였다. 조회수 기능 조회수 기능의 구현 로직은 굉장히 간단하다. 그냥 해당 게시물을 조회할 때 조회수 필드를 +1 시켜주면 된다. 프로젝트를 진행할 때에는 Setter를 사용하여 값을 변경하는 습관은 매우 좋지 않은 습관이다. 그 외에 따로 조회수 필드를 변경할 수 있는 메서드를 만들어서 진행하였다. 이는 서비스 계층에서 호출되어 사용된다. JPA의 Dirty Checking 기능을 사용하여 조회수를 1씩 올려주는 식으로 구현하였다. 서비스 계층의 클래스 레벨에서 @Transation(readOnly=true)로 설정해놓고 생성, 수정이 일어나는 메서드 레벨에서 위와 같이 @Transaction을..

ThymeLeaf 공부

컨트롤러에서 뷰를 호출하고 이를 템플릿 엔진인 thymeleaf를 사용하여 동적으로 변경해보자. 컨트롤러 정적 리소스(HTML 파일) 상품 목록 상품 등록 ID 상품명 가격 수량 1 테스트 상품1 10000 10 2 테스트 상품2 20000 20 이를 타임리프를 사용하여 동적으로 변경하여보자. 타임리프를 사용하기 위한 th 네임스페이스 추가 xmlns:th="http://www.thymeleaf.org" BootStrap 경로 절대경로로 변경 상대 경로로 설정되어 있던 bootstrap파일 경로를 타임리프를 사용하여 절대 경로로 변경하였다. 위와 같이 작성하면 타임리프가 기존에 있던 href를 날리고 th가 붙은 href로 설정함 href="value1" 을 th:href="value2" 의 값으로 변경..

Spring/Spring MVC 2021.05.13

회원 웹 기능

1. 홈 화면 추가 컨트롤러가 정적 파일보다 우선순위가 높기 때문에 /로 들어오면 home.html이 실행. 2. 등록 @GetMapping ==> Get방식 (주소창에 직접 치는 것) @PostMapping ==> Post방식 (form을 통해 전달할 때 보통 summit으로 전달) 홈에서 회원가입을 누르면 get방식에 따라 @GetMapping되어 members/createMemberForm.html이 실행. 그 후, 이름을 입력하고 등록을 누르면 http post방식으로 전달되는데 이는 @PostMapping이 호출되어 새로운 Member객체가 생성되고 전달받은 name이 MemberForm클래스를 통해 form안에 담긴다. 이를 추출해 member의 이름으로 설정하고 이를 앞서 만든 회원가입 메소..

반응형