Spring MVC WebForm을 이해한다.

Goal

  • Request Paremeter의 종류
  • Data Binding
  • Data Validation
  • Data Buffering
  • Error Message


Request Parameter의 종류

Request Parameter는 HTTP Request Message 안에 담겨서 보내진다.

1. GET 방식 : Query String

2. POST 방식 : HTTP Entity Body


Data Binding

request parameters가 form bean(=command object)에 바인딩되는 것을 말한다.

1. Naive Solution (@RequestParam 어노테이션)

2. Spring Data Binding (자동 Binding)

Data Binding 과정

  1. form bean 객체(Offer 객체)를 생성한다.
  2. request parameter으로부터 form bean에 내용이 자동으로 binding된다.
    • 이때, form bean(POJO)에 setter method가 구현되어 있어야 binding이 가능하다.
    • 또한 controller의 method 인자에 form bean을 선언되어 있어야 한다.
  3. controller에서 form bean을 자동으로 model에 넣어준다. (form bean은 model attribute이다.)
  4. model을 view에 넘겨준다.
    • controller에서 form bean을 model에 넣어 view에 전달한다.
  5. view는 form bean 내용에 접근할 수 있고 이 내용을 rendering 할 수 있다.
    • 즉, controller로부터 전달받은 model에 있는 form bean(Offer 객체, model attribute)를 사용하여 request parameter에 접근할 수 있다.
<html> 
<head> 
	<title>Thanks</title> 
</head> 
<body> 
    Hi, ${offer.name}.<br/>
    You have successfully registered.
</body> 
</html>

Data Validation

사용자가 실수로 잘못된 정보를 입력했을 때 잘못된 양식임을 알려주기 위해 사용한다.

1. Hibernate Validator

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.4.Final</version>
</dependency>
public class Offer {
    private int id;

    @Size(min=5, max=100)
    @Pattern(regexp="^[A-Z]{1}[a-z]+$") // 정규표현(Regular Expression)
    private String name;

    @NotEmpty
    @Email
    private String email;
}

2. Message Interpolation

메시지 보간법(삽입 어구)은 위배된 Bean 유효성 검증 제약 조건에 대한 오류 메시지를 생성하는 것이다.

public class Offer {

   private int id;

   @Size(min=3, max=100, message="Name must be between 3 and 100 characters")
   private String name;

   @Email(message="please provide a valid email address")
   @NotEmpty(message="the email address cannot be empty")
   private String email;

   @Size(min=5, max=100, message="Text must be between 5 and 100 characters")
   private String text;
 }

3. Validating Object

@RequestMapping(...)
public String doCreate(@Valid Offer offer, BindingResult result) { 
    if(result.hasErrors()) {
	List<ObjectError> errors = result.getAllErrors();

       for(ObjectError error:errors) {
    		System.out.println(error.getDefaultMessage());
       }
       return "createoffer";
    }
    ... 
}

Data Buffering

사용자가 잘못된 정보를 입력했을 때 처음부터 다시 입력할 필요가 없도록 입력한 정보를 view에 그대로 남아있게 해주는 것이다.

1. Spring Form Tag Library

Spring form tag lib HTML
<sf:form> <form>
<sf:input> <input  type=”text”>
<sf:password> <input  type=”password”>
<sf:checkbox> <input  type=”checkbox”>

2. Revised JSP and Error Message

  1. ‘spring form tag library’ 태그 사용 지시문 선언
  2. ‘spring form tag’ 사용
  3. ‘spring form tag’ 사용
    • <sf:errors> 태그는 유효성 검사 후 BindingResult 객체로부터 받은 error message를 HTML에 랜더링한다.
  4. Model에 들어 있는 model attribute의 이름
    • 빈 객체로 넘어온 offer이라는 이름의 model attribute(Offer 객체)에 사용자가 입력한 데이터를 넣기 위한 설정
  5. name=”name” -> path=”name”으로 사용
    • Offer 객체의 어떤 속성과 binding 할지를 명시

전체 과정

관련된 Post