본문 바로가기

카테고리 없음

스프링 공부 2일차. HTML폼과 커맨드 객체(2)

예제를 통해서 HTML폼에 입력된 데이터를 커맨드 객체를 이용해서 전달 받아보자.

 

앞에서 설명했듯이, 스프링은 자바빈 클래스 프로퍼티이름과 HTML폼의 항목 이름이 일치할 경우 폼에 입력한 값을 해당 자바빈 클래스의 프로퍼티값으로 설정 해주는 기능을 제공한다고 했다.

 

이번에는 커맨드 객체를 List타입으로 받아 자바빈 클래스의 프로퍼티값에 설정해보자.

 

먼저 자바빈 클래스를 생성한다, 이번 예제에는 2개의 자바빈 클래스를 사용할 것인데,

겁 먹지 말자 우리에게는 스프링이라는 도구가 있으니까

 

 

HTML폼에서 입력한 데이터를 자바빈 클래스의 프로퍼티값에 설정하기 위해 생성한 자바빈 클래스 2개이다.

 

간단하게 살펴보면,

각각의 클래스에는 모두 String타입 3개의 변수와, 각각의 변수의 Setter, Getter메서드가 존재한다.

 

각각의 변수들은 zipcode 는 우편 번호, address1 은 주소, address2 는 상세 주소를 저장할 변수이고,

 

OrderItem 자바빈 클래스의 변수에는,

Integer타입의 itemId, Integer타입의 number, String타입의 remark 총 3개의 변수가 존재한다.

 


 

다음은 사용자의 요청을 처리하기 위한 컨트롤러 클래스이다.

 

이 클래스가 컨트롤러임을 dispatcherServlet에 알려주기 위해 @Controller 어노테이션을 사용했고, 

사용자의 요청 URL을 처리하기 위해 @RequestMapping 어노테이션을 사용했다.

 

따라서, "order/order.do" 라는 요청이 들어왔을때 요청 방식이 GET방식이라면, form()메서드를 실행하고 ViewResolver에 뷰 이름을 알려주기 위해 "order/orderForm"을 리턴한다.

 


 

이 글을 시작할 때 커맨드 객체를 List로 받아 커맨드 객체를 설정한다고 했다. 따라서 OrderItems 클래스를 생성해보자.

OrderCommand 클래스에는,

List타입의 제너릭이 <OrderItem>으로 설정된 orderItems변수와, Address객체의 address변수가 존재한다. 

 


이제 컨트롤러가 처리한 값 "order/orderForm" 문자열을 뷰 이름으로 ViewResolver에게 넘겨주자

ViewResolver가 뷰 이름과 일치하는 JSP뷰를 보여준다.

 

여기서 살펴 보면, orderItems List객체를 HTML폼의 항목 이름으로 설정한 것을 볼 수 있다.

 

 

앞서 설명한 글에서, 뷰 코드에서는 커맨드 객체의 클래스 이름을 사용해서 커맨드 객체에 접근할 수 있다고 했다. 다시  말하지만, 클래스 이름의 첫글자는 소문자로 해야한다.

 

List타입의 orderItems의 제너릭은 OrderItem이기 때문에, OrderItem의 프로퍼티를 HTML폼을 통해 입력받을 수 있다.

뷰를 실행해보면 다음과 같은 뷰를 볼 수 있다.

 

여기서 주의해야할 점은,

커맨드 객체에 접근해서 사용하기 때문에 커맨드 객체의 타입과 다른 값을 입력하면 오류가 발생한다. 예를 들어,

itemId 프로퍼티의 타입을 Integer로 설정했다. 하지만 입력폼에 String타입을 입력하면 오류가 발생하게 된다.

 

 

따라서, 커맨드 객체의 타입에 맞게 알맞은 값을 입력 해주어야 오류 볼 일이 없을것이다.

 

알맞은 값을 입력해서 제출 버튼을 누르게 되면

OrderController의 POST방식을 처리하는 submit()메서드가 실행 되면서, orderForm에서 입력한 값들을 orderCompletion 뷰를 보여준다.