SPRING MVC VIEW

SPRING MVC VIEW

View 영역 구현

컨트롤러는 최종적으로 결과를 출력 할 뷰와 뷰에 전달할 객체를 담고 있는 ModelAndView 객체를 리턴시킨다

DispatcherServlet은 ViewResolver를 사용하여 결과를 출력할 View 객체를 구하고, 구한 View 객체를 이용하여 내용을 생성시킨다.

SPRING가 제공하는 ViewResolver, JSP, Tiles, Velocity와 같은 뷰 구현 기술을 SPRING에 적용시키는 것을 확인.

ViewResolver . SPRING 컨트롤러는 뷰에 의존적이지 않다.

컨트롤러는 결과를 생성할 뷰의 이름만 지정할 뿐이다.

EX )

@Controller

public class HelloController{

@RequsetMapping("hello.do")

public String hello(){

return "hello";

}

}

컨트롤러가 지정한 뷰 이름으로부터 응답 결과 화면을 생성하는 View 객체는 ViewResolver이 구한다.

SPRING은 몇 가지 ViewResolver 구현 Class를 제공하고 있는데, 이중 주요 ViewResolver 구현 Class는 아래와 같다.

ViewResolver Interface

package org.springframework.web.servlet;

import java.util.Locale;

public interface ViewResolver{

View resolveViewName(String viewName, Locale locale) throws Exception;

}

ViewResolver는 뷰 이름과 지역화를 위한 Locale을 파라미터로 전달받으며, Mapping되는 View 객체를 리턴한다. 만약, Mapping되는 View 객체가 존재하지 않으면 null을 리턴한다.

ViewResolver는 응답 결과를 생성할 뷰 객체를 리턴한다. 모든 뷰 Class는 View Interface를 구현하고 있으며, View Interface는 다음과 같이 정의되어 있다.

package org.springframework.web.servlet;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public interface View{

String RESPONSE_STATUS_ATTRIBUTE = View.clss.getName() + ".responseStatus";

String getContentType();

void render(Map model, HttpServletRequest request) throws Exception;

}

getContentType() 메서드는 "text/html"과 같은 응답 결과의 컨텐츠 타입을 리턴한다. render() 메서드는 실제로 응답 결과를 생성한다.

render() 메서드의 첫 번째 파라미터인 model에는 컨트롤러가 리턴한 ModelAndView 객체의 모델 데이터가 전달된다. 각각의 View 객체는 이 모델 데이터로부터 응답 결과를 생성하는 데 필요한 정보를 구한다.

Message 출력을 위한 커스텀 태그

SPRING은 MessageSource로 부터 Message를 가져와 출력해 주는 커스텀 태그를 제공하고 있다. 커스텀 태그는 다음과 같이 code 속성을 이용하여 읽어 올 Message의 Code를 지정한다.

Code에서 사용되는 Message를 포함하고 있는 Message ReSource 파일은 다음과 같이 각 Code 값에 해당하는 Message를 설정하고 있을 것이다.

login.form.title=Login Form

login.form.type=Login Type

login.form.id=ID

login.form.password=Password

login.form.submit=Login

Message ReSource 파일은 {n} 형식을 이용하여 변하는 부분을 명시할 수 있다.

greeting=\uc804 {0} \uc785\ub2c8\ub2e4. "{1}"

커스텀 태그는 arguments 속성을 이용하여 {n}에 들어갈 값을 설정할 수 있다. 이 때, 각 값은 콤마를 이용하여 구분한다.

아래 Code는 arguments 태그의 사용 예를 보여 주고 있다.

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

...

SPRING이 제공하는 폼 관련 커스텀 태그

SPRING의 장점 중 하나는 입력 폼 값을 커맨드 객체에 저장하는 기능을 제공한다는 것이다. SPRING은 또한 반대로 커맨드 객체의 값을 입력 폼에 출력해 주는 JSP 커스텀 태그를 제공하고 있어, 좀 더 쉽게 폼 관련 태그를 생성할 수 있도록 도와 준다. 이들 태그를 사용하려면 먼저 다음과 같이 커스텀 태그를 설정해 주어야 한다.

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

태그를 위한 커스텀 태그 :

커스텀 태그는 태그를 생성할 때 사용된다. 커스텀 태그를 사용하는 가장 간단한 방법은 다음과 같다.

...

">

커스텀 태그는 method 속성과 action 속성을 표시하지 않으면 method 속성의 값은 "post"로 설정되고 action 속성의 값은 현재 요청 URL의 값이 설정된다.

...

생성된 태그의 id 속성은 입력 폼의 값을 지정하는 커맨드 객체의 이름이 할당된다.

만약, 커맨드 객체의 이름이 기본 값인 "command"가 아니라면 다음과 같이 commandName 속성에 커맨드 객체의 이름을 명시해 주어야 한다.

...

커스텀 태그는 태그와 관련하여 다음의 속성들을 추가적으로 제공하고 있다.

: action : 폼데이터를 전송할 URL을 입력 (HTML 태그 속성)

: enctype : 전송될 데이터의 인코딩 타입. HTML 태그 속성과 동일

: method : 전송 방식. HTML 태그 속성과 동일

태그의 몸체에는 태그나 태그와 같이 입력 폼을 출력하는데 필요한 HTML 태그를 입력할 수 있다. 이때, 입력한 값이 잘못되어 다시 값을 입력해야 하는 경우에는 다음과 같이 커맨드 객체의 값을 사용해서 이전에 입력한 값을 출력한다.

...

...

커맨드 객체의 값을 다시 입력 폼에 출력해 주어야 하는 경우에는 이나 와 같이 SPRING이 제공하는 커스텀 태그를 사용하면 좀 더 쉽게 커맨드 객체의 값을 입력 폼에 설정할 수 있다. SPRING은 입력 폼과 관련하여 다양한 커스텀 태그를 제공하고 있다.

태그를 위한 커스텀 태그 : , ,

커스텀 태그는 다음과 같이 path 속성을 사용해서 바인딩 될 커맨드 객체의 프로퍼티를 지정한다.

회원 ID

Code가 생성하는 HTML 태그는 아래와 같다. 이때 id 속성과 name 속성의 값은 프로퍼티의 이름을 이용하여 생성하며, value 속성에는 커스텀 태그의 path 속성에서 지정한 커맨드 객체의 프로퍼티 값이 출력된다.

태그를 위한 커스텀 태그 : , ,

태그를 생성한다. 태그를 생성하는 데 필요한 컬렉션을 전달받을 수도 있다.

지정한 컬렉션 객체를 이용하여 태그를 생성한다.

한 개의 태그를 생성한다.

태그는 선택 옵션을 제공할 때 주로 사용된다. 예를 들어, 태그를 이용해서 직업 선택을 위한 옵션을 제공한다 만약 이런 옵션 정보는 컨트롤러에서 생성해서 뷰에 전달하는 경우가 많다. 보통 @ModelAttribute Annotation을 이용해서 태그에서 사용될 옵션 목록을 전달한다.

@ModelAttribute("loginTypes")

protected List referenceData() throws Exception{

List loginTypes = new ArrayList();

loginTypes.add("일반회원");

loginTypes.add("기업회원");

loginTypes.add("헤드헌터회원");

return loginTypes;

}

커스텀 태그를 사용하면 손쉽게 뷰에 전달한 객체를 이용하여 와 태그를 생성할 수 있다. 아래 Code는 커스텀 태그를 이용하여 태그를 생성하는 예를 보여주고 있다. 이때 path 속성은 바인딩 될 커맨드 객체의 이름을 입력하며, items 속성에는 태그를 생성할 때 사용될 컬렉션 객체를 지정한다.

...

위의 커스텀 태그는 다음과 같은 HTML 태그를 생성한다. (실제로는 한 줄로 생성되는데, 가독성을 위해 포맷 일부를 변경했다.)

from http://workerst.tistory.com/68 by ccl(A) rewrite - 2021-12-27 18:01:31