일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 노스마트폰챌린지
- tㅐ
- 종단관심사
- 소트라테스익스프레스
- 2챕터독서
- InteliJ
- 내장객체영역
- onlyfullgroupby
- 데이터베이스생성
- JSP
- 일상
- diario
- 횡단관심사
- 도전로그
- 책추천
- final변수
- 권한부여
- 평가용
- 요청파라미터
- 테이블생성
- 스프링
- daily
- 자기계발
- 데이로그
- 생크림활용기
- 첫줄
- requestparameter
- 복습!
- 데일리
- MySQL
- Today
- Total
Emma.log()
validation사용하기(단일항목검사) 본문
이번에는 좀 기억에 남겨둬야하는 예시 인것 같아서 기록을 해두기로 했다... 자세한 설명이나 뭐 이런 저런건 꼭 책을 참고해라 이책 좋은책이다... 보스도 이책 버릴것이 없고 군더더기 없다고 했으니 최고의 칭찬인셈.. 저번 책은 쓰레기라 평했던것에 비해.. 아주 좋은 평이다. (스프링프레임워크첫걸음 - 위키북스 -) 광고는 아니고,,
개발환경
InteliJ , Gradle, SpringBoot, Lombok , Thymeleaf 사용 .. 이외에도 쓴거 있긴한데 그냥 넘어가겟삼 아 validation 이거 이거때매 기록한다
1. 어플리케이션 레이어 생성
- Form 클래스 생성
src/main/java 밑에 com.example.demo 폴더 밑에 form 패키지 만들고 그 밑에 Form클래스를 생성한다.
lombok의 Data어노테이션을 이용해서 getter/setter만들어주고, 유효성 검사어노테이션두개를 각각 걸어준다.
유효성검사에 걸렸을 경우 에러메시지를 설정하려면, 단일항목검사 어노테이션에 message속성을 추가하고, 에러메시지 내용을 설정한다. 에러메시지 안에 {속성명} 을 사용하면 ㅅ속성값을 넣을수 있다. 이번에 {min} {max}한것 처럼 가능
- 컨트롤러 생성
※ 와웅 깜빡하고 컨트롤러 클래스명을 그냥 Controller 로 생성했는데 이러면 안된다. (controller패키지 생성하고 그 밑애 클래스 생성) 그러면 @Controller 로 선언해서 컴포넌트 스캔하게끔 해야하는데 애초에 이 클래스 이름이 Controller이니까 어노테이션이 그냥 심플하게 저렇게 생성되는게 아니고 @뒤로 길고긴 그 임포트 되는 경로가 붙고나서 Controller로 붙고 임포트 문은 안생긴다. 아마 이름이 같아서 그런듯하다.. 주의하자
유효성 검사를 하기 위해서는 form-backing-bean의 설정이 필요하다. HTML의 <form>태그에 바인딩되는 Form클래스 인스턴스를 form-backing-bean 이라고 부르고 @ModelAttribute 어노테이션을 사용해서 연결한다.
form-backing-bean 의 초기화는 @ModelAttribute 어노테이션을 부여한 메소드에서 작성한다.
☆ 작성방법은 @ModelAttribute어노테이션을 부여하고 HTML 의 <form> 태그에 바인딩할 Form클래스를 초기화 해서 리턴값으로 돌려준다.
@ModelAttribute어노테이션이 부여된 메소드는 이 클래스의 요청바인딩 메소드가 실행되기 전에 호출되어 요청스코프(request scope)로 Model에 저장된다. Model에 저장될때 명시적으로 일므을 지정하지 않으면, Form클래스의 이름은 소문자 카멜표기법이 적용되 Model에 저장된다.
- 뷰 생성(입력화면)
th:object 속성을 설정하고 값으로 Model에 저장된 Form클래스의 소문자 카펠표기로된 이름을 설정한다. Form클래스의 필드와 관계를 설정하기 위해 th:field속성에 *{필드명} 을 설정한다.
th:field 속성 을 이용하면 HTML로 표시되었을때 id속성, name속성, value속성이 생성된다.
- 컨트롤러 추가
@Validated 어노테이션을 단일항목검사 어노테이션을 설정한 Form클래스에 부여하면, 유효성 검사가 실행된다.
Form클래스 만들때 각각 필드 두개에다 항목검사용 어노테이션을 부했었으니 그거랑 @Validated를 인수로 넣은 CalcForm 클래스에 부여하면 유효성 검사가 실행되는것인듯
실행한 결과(에러정보)는 BindingResult 인터페이스에 보관된다.
BindingResult 인터페이스의 hasErrors 메소드의 반환값으로 에러의 유무(true/ false)를 확인할수있다. 에러가 발생한 경우, 입력화면entry로 이동한다.
또 유효성 검사를 실행할때 @Validated 어노테이션을 부여한 클래스와 BindingResult인터페이스를 함께 인수로 사용하고, 반드시 @Validated →BindingResult 순으로 명시해서 사용해야한다.
- 뷰에 추가(입력화면)
entry 에 추가
에러를 표시하고 싶은 부분에 추가한다.
아직 타임리프 문법이 이해가 잘 가지 않는다.... 다시 공부해야지
#fields.hasErrors메소드에서 에러가 발생했는지 판단한다.
#fields.errors메소드에서 에러 메세지를 배열로 돌려주기때문에 th:each속성을 이용해서 표시했다. 여기선 모든 필드의 에러를 받아서 출력하기 때문에#fields.errors메소드의 인수로 * 을 전달했지만, 특정 필드으 ㅣ에러를 받아서 출력하고 싶을때는 인수에 필드명 을 설정하면된다.
- 뷰 생성(확인화면)
[[${calcForm.leftNum}]]+[[${calcForm.rightNum}]]=[[${result}]]
calcForm을 이용해 객체.필드 에 저장된 결과를 표시하고, result에 계산결과를 표시한다.
출처 : 스프링프레임워크 첫걸음 -위키북스-
'Back-End > Spring' 카테고리의 다른 글
커스텀 유효성 검사 (0) | 2022.10.07 |
---|---|
유효성검사 메시지관리 (0) | 2022.10.07 |
URL에 포함된 값 받기 (0) | 2022.10.07 |
유효성 검사 (0) | 2022.10.07 |
Form 클래스 이용해서 입력값받기 (0) | 2022.10.06 |