학습(구)/Spring 요약

Spring - 커맨드 객체

잉아당 2020. 10. 19. 23:58
728x90

커맨드 객체를 이용한 요청 파라미터 처리

커맨드 객체는 요청 파라미터가 담긴 데이터 객체입니다. 요청 파라미터가 많을 수록 코드가 길어지기 때문에 커맨드 객체를 사용합니다.

커맨드 객체는 요청 파라미터를 받을 수 있게 setter를 포함하는 객체이며 스프링은 이 setter를 이용해 요청 파라미터를 전달합니다. 커맨드 객체가 요청 매핑 어노테이션이 적용된 요청 처리 메소드의 파라미터에 존재하면 요청 파라미터의 이름과 커맨드 객체의 프로퍼티 이름이 같은 것들에 대해 setter를 이용해 핸들러 어댑터가 자료형 변환을 시켜 set 시켜줍니다. 

 

뷰 페이지에서 커맨드 객체 이용

스프링 MVC는 커맨드 객체를 자동적으로 Model 객체에 넣습니다. 이때 키 값은 커맨드 객체의 이름에 첫글자를 소문자로 한 값이 됩니다. 이 작업은 커맨드 핸들러가 수행합니다. 이렇게 되면 뷰 페이지에서 사용이 가능합니다.

 

커맨드 객체 속성 이름 변경

커맨드 객체로 사용할 파라미터 앞에 @ModelAttribute 어노테이션을 사용하면 해당 식별자로 Model에 넣어지게 됩니다. 

또한 @ModelAttriube 어노테이션은 동일 컨트롤러 안의 메소드에 해당 어노테이션이 붙을 경우 해당 식별자로 Model이 생성되고 리턴 값은 해당 Model에 들어가게 됩니다. 만일 해당 식별자의 Model이 존재한다면 파라미터가 해당 Model에 바인딩 됩니다.

 

컨트롤러 없는 경로 매핑

MVC로 구현되어져야 하기때문에 내부적으로 main에 대한 컨트롤러를 구현해야 합니다.

그러므노 WebMvcConfigurer 인터페이스의 addViewControllers()메소드를 재정의하여 main 컨트롤러가 있는것처럼 작동되게 합니다.

addViewControllers의 매개변수인 ViewControllerRegistry의 registry.addViewController(요청경로).setViewName(뷰이름)메소드를 사용해 구현합니다.

 

커맨드객체의 중복

List 형태 : 프로퍼티이름[인덱스]

중복 형태 : 프로퍼티이름.프로퍼티이름

 

ModelAndView를 통한 뷰 선택과 모델 전달

요청 매핑 어노테이션이 붙은 메소드는 ModelAndView를 리턴할 수 있습니다.

ModelAndView 객체의 addObject() 와 setViewName() 메소드를 통해 모델을 추가하고 뷰를 설정할 수 있습니다.

 

Get방식과 Post방식에 동일 이름 커맨드 객체 사용

form 태그의 입력과 재입력의 요청 경로를 동일 요청 경로로 작성하되 요청 방식을 다르게 해서 구현합니다. 이때 <form:form>태그는 커맨드 객체가 필수 이며 요청 처리 메소드에서 커맨드객체를 파라미터로 적용하는데 스프링 form태그의 커맨드 객체와 이름을 동일하게 해주기 위해 @ModelAttribute를 사용합니다.

 

스프링 폼태그

<form:form>태그는 form을 형성하는데 커맨드 객체가 존재해야 사용이 가능하며 modelAttribute로 지정합니다.

<form:input>태그는 input역할을 하며 path속성으로 커맨드 객체의 프로퍼티를 지정해 value값으로 사용합니다.

<form:passsword>태그는 password역할을 하며 path속성으로 커맨드 객체의 프로퍼티를 지정합니다.

<form:hidden>태그는 hidden역할을 하며 path속성으로 커맨드 객체의 프로퍼티를 지정합니다.

<form:select>태그는 select역할을 하며 items속성에 콜렉션을 지정하고  path는 커맨드 객체의 프로퍼티를 지정합니다.

이때 옵션들을 <form:option>으로 개별적으로 나타낼 수 있고 <form:options>으로 items속성에 커맨드 객체의 프로퍼티 값을 지정하여 나타 낼 수 있습니다.

<form:checkboxes>는 checkbox역할을 하며 items속성으로 콜렉션을 받고 path로 커맨드 객체의 프로퍼티를 지정합니다

<form:radioboxes>는 radiobox역할을 하며 items속성으로 콜렉션을 받고 path로 커맨드 객체의 프로퍼티를 지정합니다.

 

 

 

'학습(구) > Spring 요약' 카테고리의 다른 글

Spring - 검증 객체와 에러코드  (0) 2020.10.20
Spring - 메시지 처리  (0) 2020.10.20
Spring - 요청 경로 매핑과 요청 파라미터, 리다이렉트  (0) 2020.10.19
Spring - MVC  (0) 2020.10.19
Spring - DB  (0) 2020.10.19