1. 개요

이 기사에서는 Spring 양식과 컨트롤러에 대한 데이터 바인딩에 대해 설명합니다. 또한, 우리의 주요 어노테이션 중 하나를 살펴해야합니다 스프링 MVC@ModelAttribute를 .

물론 Spring MVC는 잠재력을 최대한 활용하기 위해 이해해야 할 많은 사항이 포함 된 복잡한 주제이므로 여기에서 프레임 워크에 대해 자세히 알아보십시오 .

2. 모델

먼저- 표시하고 양식에 바인딩 할 간단한 엔티티정의 보겠습니다 .

public class Employee {
    private String name;
    private long id;
    private String contactNumber;

    // standard getters and setters
}

이것은 우리의 양식 지원 객체가 될 것입니다.

3.보기

다음으로 실제 형식 과이를 포함하는 HTML 파일을 정의 보겠습니다 . 새로운 직원이 생성 / 등록되는 페이지를 사용할 것입니다.

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
    <head>
    </head>
    <body>
        <h3>Welcome, Enter The Employee Details</h3>
        <form:form method="POST" 
          action="/spring-mvc-xml/addEmployee" modelAttribute="employee">
             <table>
                <tr>
                    <td><form:label path="name">Name</form:label></td>
                    <td><form:input path="name"/></td>
                </tr>
                <tr>
                    <td><form:label path="id">Id</form:label></td>
                    <td><form:input path="id"/></td>
                </tr>
                <tr>
                    <td><form:label path="contactNumber">
                      Contact Number</form:label></td>
                    <td><form:input path="contactNumber"/></td>
                </tr>
                <tr>
                    <td><input type="submit" value="Submit"/></td>
                </tr>
            </table>
        </form:form>
    </body>
</html>

먼저, 양식 을 정의하는 데 도움이 되도록 태그 라이브러리를 JSP 페이지 ( taglib 양식)에 포함 시켰습니다 .

다음 – 여기서 <form : form> 태그가 중요한 역할을합니다. 일반 HTLM <form> 태그 와 매우 유사 하지만 modelAttribute 속성은이 양식을 지원하는 모델 개체의 이름을 지정하는 키입니다.

<form:form method="POST" 
  action="/SpringMVCFormExample/addEmployee" modelAttribute="employee">

이것은 나중에 컨트롤러에서 @ModelAttribute에 해당합니다 .

다음 – 각 입력 필드는 Spring Form taglib – form : prefix의 또 다른 유용한 태그를 사용 합니다 . 이러한 각 필드 경로 속성을 지정합니다 . 이것은 모델 속성의 getter / setter (이 경우 Employee 클래스)에 해당해야합니다. 페이지가로드 될 때 입력 필드는 입력 필드에 바인딩 된 각 필드의 getter를 호출하는 Spring에 의해 채워집니다. 양식이 제출되면 setter가 호출되어 양식의 값을 개체에 저장합니다.

마지막으로 양식이 제출 되면 컨트롤러의 POST 핸들러가 호출되고 양식은 우리가 전달한 employee 인수에 자동으로 바인딩됩니다 .

Spring MVC를 사용한 기본 양식

4. 컨트롤러

이제 백엔드를 처리 할 컨트롤러살펴 보겠습니다 .

@Controller
public class EmployeeController {

    @RequestMapping(value = "/employee", method = RequestMethod.GET)
    public ModelAndView showForm() {
        return new ModelAndView("employeeHome", "employee", new Employee());
    }

    @RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
    public String submit(@Valid @ModelAttribute("employee")Employee employee, 
      BindingResult result, ModelMap model) {
        if (result.hasErrors()) {
            return "error";
        }
        model.addAttribute("name", employee.getName());
        model.addAttribute("contactNumber", employee.getContactNumber());
        model.addAttribute("id", employee.getId());
        return "employeeView";
    }
}

컨트롤러는 두 가지 간단한 작업, 즉 양식에 데이터를 표시하기위한 GET과 양식 제출을 통한 생성 작업을위한 POST를 정의합니다.

또한 "employee"라는 객체가 모델에 추가되지 않으면 JSP가 "employee"모델 속성에 양식을 바인딩하도록 설정되므로 JSP에 액세스하려고 할 때 Spring이 불만을 표시합니다.

java.lang.IllegalStateException: 
  Neither BindingResult nor plain target object 
    for bean name 'employee' available as request attribute
  at o.s.w.s.s.BindStatus.<init>(BindStatus.java:141)

양식 지원 객체에 액세스하려면 @ModelAttribute 어노테이션을 통해 삽입해야합니다 .

@ModelAttribute 방법 인수에 대한 인수가 모델에서 검색됩니다 나타냅니다. 모델에 없으면 인수가 먼저 인스턴스화 된 다음 모델에 추가됩니다.

5. 바인드 오류 처리

기본적으로 Spring MVC는 요청 바인딩 중에 오류가 발생하면 예외를 발생시킵니다. 이것은 일반적으로 우리가 원하는 것이 아니라 사용자에게 이러한 오류를 표시해야합니다. 컨트롤러 메서드에 인수로 하나를 추가 하여 BindingResult 를 사용할 것입니다 .

public String submit(
  @Valid @ModelAttribute("employee") Employee employee,
  BindingResult result,
  ModelMap model)

BindingResult의 인수 요구는 바로 우리의 폼 지원 객체 뒤에 위치한다 -는 드문 경우 중 하나 어디 메소드 인수 문제의 순서. 그렇지 않으면 다음 예외가 발생합니다.

java.lang.IllegalStateException: 
  Errors/BindingResult argument declared without preceding model attribute. 
    Check your handler method signature!

이제 – 예외가 더 이상 발생하지 않습니다. 대신 제출 메서드에 전달 되는 BindingResult 오류 가 등록됩니다 . 이 시점에서 다양한 방법으로 이러한 오류를 처리 할 수 ​​있습니다. 예를 들어 작업을 취소 할 수 있습니다.

@RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
public String submit(@Valid @ModelAttribute("employee")Employee employee, 
  BindingResult result,  ModelMap model) {
    if (result.hasErrors()) {
        return "error";
    }
    
    //Do Something
    return "employeeView";
}

결과에 오류가 포함 된 경우 이러한 오류를 올바르게 표시하기 위해 사용자에게 다른보기를 반환하는 방법에 유의하십시오. 그 뷰를 살펴 보겠습니다 – error.jsp :

<html>
    <head>
    </head>

    <body>
        <h3>Please enter the correct details</h3>
        <table>
            <tr>
                <td><a href="employee">Retry</a></td>
            </tr>
        </table>
    </body>

</html>

6. 사원 조회

마지막으로 새 직원을 만드는 것 외에도 간단히 표시 할 수도 있습니다. 여기에 대한 빠른보기 코드가 있습니다.

<body>
    <h2>Submitted Employee Information</h2>
    <table>
        <tr>
            <td>Name :</td>
            <td>${name}</td>
        </tr>
        <tr>
            <td>ID :</td>
            <td>${id}</td>
        </tr>
        <tr>
            <td>Contact Number :</td>
            <td>${contactNumber}</td>
        </tr>
    </table>
</body>

JSP 페이지는 단순히 EL 표현식을 사용하여 모델에있는 Employee 객체의 속성 값을 표시합니다.

7. 응용 프로그램 테스트

예를 들어 Tomcat 서버에서 간단한 애플리케이션을 배포하고 로컬로 액세스 할 수 있습니다.

http : // localhost : 8080 / spring-mvc-xml / employee

다음은 제출 작업 전의 기본 양식을 포함하는보기입니다.

Spring MVC Form 예제-제출

Spring MVC Form 예제 – 제출

제출 후 데이터가 표시됩니다.

Spring MVC Form 예제-보기

Spring MVC Form 예제 –보기

그게 다 입니다. Spring MVC를 사용하는 간단한 양식의 작업 예제이며 유효성 검사가 있습니다.

이 Spring MVC 예제의 구현은 GitHub 프로젝트 에서 찾을 수 있습니다. 이것은 Maven 기반 프로젝트이므로 그대로 가져 와서 실행하기 쉽습니다.

마지막으로 기사의 시작 부분에서 말했듯이 Spring MVC에 대해 더 깊이 파헤쳐 야합니다 .