Emma.log()

Form 클래스 이용해서 입력값받기 본문

Back-End/Spring

Form 클래스 이용해서 입력값받기

EverJunior Minjoo 2022. 10. 6. 14:53

@RequestParam은 요청 파라미터를 하나씩 인수로 받아서 입력항목이 많으면 인수도 함께 늘려야해서 확장성에 문제가 좀 생긴다. 스프리어MVC에선 입력값을 저장하는 클래스를 준비해 요청 파라미터를 모아서 넘겨주는것이 가능하다.

 

Form 클래스 생성

입력값을 저장하는 클래스는 입력항목이 view에서 form 태그안에 작성되어 있고, Form클래스 라고 하는 view의 폼을 표현하는 클래스를 생성한다. (기본 패키지 밑에 .form패키지를 생성해서 그 안에 Form 클래스를 생성한다.)

ps 롬북을써서 @Data 하나로 게터세터 만들었다.

더보기
@Data
public class Form {
    private String name;
    private Integer age;
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private LocalDate birth;
}

@DateTimeFormat으로 iso = DatTimeFormat.ISO.DATE 지정해서 날짜 형식을 yyyy-MM-dd로 받아들이도록 지정한다.

 

컨트롤러에 원래 요청핸들러 메소드에 어노테이션 리퀘스트 파람 쓸때는 인수로 다 담고 Model도 담았어야 했는데 안담는다.

 

확인용 View 화면에서는

이름  :  [[${form.name}]]

 

이런식의 form을 이용해서 '객체.필드명' 형식으로 저장된 데이터를 사용한다. 여기서 [[${ } ]] 이거 쓴거는 저기 글자랑 합치려고 그런것 


뷰마다 입력 데이터나 표시 데이터를 하나의 클래스로 취급할떄 Form을 사용한다. 회원가입할때 왜 보통 입력한대로 값이 들어가니까 그거 기반으로 엔티티나 모델 만들었던것처럼 그때 Form클래스를 이용한다. 

뷰 단위로 데이터를 처리할수 있어서 편하고, Form클래스는 POJO로 작성한다.

뷰 입력항복의 이름(name속성)과 그것을 받는 Form클래스의 필드명을 같은이름으로 하면 데이터가 바인딩된다.

요청파라미터는 Form클래스의 필드 타입으로 자동 변환되어 저장되고, Form클래스는 요청 파라미터를 받은후 요청핸들러 메소드에 인수에 Form클래스가 있는 경우에 는 자동으로 생성되어 Model에 저장된다. Model에 저장된 Form클래스는 기본적으로 요청스코프(request scope)로 설정되서 응답을 response한후 삭제된다.

Model에 저장할때 명시적으로 '이름'을 주지않으면 저장하는 클래스명에 소문자 카멜표기법을 적용해서 Model에 저장한다 (CalcForm → calcForm )이런식

그래서 Form클래스를 이용해서 요청파라미터를 받을때 요청핸들러 메소드에서 종종 인수로 쓰던Model을 빼고 Form을 인수로 쓴것이다.

 

 

 참고 : 스프링프레임워크 첫걸음 - 위키북스-

 

'Back-End > Spring' 카테고리의 다른 글

URL에 포함된 값 받기  (0) 2022.10.07
유효성 검사  (0) 2022.10.07
RequestParam 사용해 입력값 받기  (0) 2022.10.06
요청 파라미터  (0) 2022.10.06
타임리프2  (0) 2022.10.06