Anyframe Simpleweb Map Plugin

Version 1.0.1

본 문서의 저작권은 삼성SDS에 있으며 Anyframe 오픈소스 커뮤니티 활동의 목적하에서 자유로운 이용이 가능합니다. 본 문서를 복제, 배포할 경우에는 저작권자를 명시하여 주시기 바라며 본 문서를 변경하실 경우에는 원문과 변경된 내용을 표시하여 주시기 바랍니다. 원문과 변경된 문서에 대한 상업적 용도의 활용은 허용되지 않습니다. 본 문서에 오류가 있다고 판단될 경우 이슈로 등록해 주시면 적절한 조치를 취하도록 하겠습니다.


I. Introduction
II. Controller
1. SimpleMapServiceController
III. Map 기반의 Simpleweb 개발

I.Introduction

Simpleweb Map Plugin은 Spring MVC 기반의 웹 어플리케이션을 개발할 때 개발자가 웹 개발을 보다 쉽고 간단하게 할 수 있도록, Transfer Object로 Map(java.util.Map) 객체를 사용하는 공통 Controller 클래스 및 태그 라이브러리들을 사용하여 작성된 샘플 코드와 이를 활용하는데 필요한 참조 라이브러리들로 구성되어 있다.

Installation

Command 창에서 다음과 같이 명령어를 입력하여 simpleweb-map plugin을 설치한다.

mvn anyframe:install -Dname=simpleweb-map

installed(mvn anyframe:installed) 혹은 jetty:run(mvn clean jetty:run) command를 이용하여 설치 결과를 확인해볼 수 있다.

Dependent Plugins

Plugin NameVersion Range
Simpleweb 2.0.0 > *

II.Controller

이번 장에서는 Transfer Object를 java.util.Map으로 사용할 경우 사용하게 될 Anyframe에서 제공하는 Controller 클래스에 대해 알아보도록 한다.

1.SimpleMapServiceController

SimpleMapServiceController는 Map 타입의 객체를 Transfer Object를 사용할 때의 데이터 바인딩을 지원해줄 AbstractServiceController를 확장한 Controller 클래스이다. HttpServletRequest의 Parameter로 넘어온 값을 메소드 정보의 argument 타입의 객체(여기선 Map객체가 됨)로 바인딩 해주며 Map 타입의 객체를 Transfer Object로 사용하는 경우 데이터 바인딩 방법을 바꾸거나 특정 작업을 추가 할 때, 또는 AbstractServiceController의 기능을 변경하고 싶을 때는 SimpleMapServiceController를 확장하여 구현하면 된다. 다음은 Simpleweb-Map Plugin 설치로 추가된 Spring 속성 정의 파일 simpleweb-map-servlet.xml 파일의 일부이다.

<!-- simple direct service controller -->
<bean name="/simplemap.do" class="org.anyframe.simpleweb.controller.SimpleMapServiceController">
	<property name="beanMethodsRepo" ref="beanMethodsRepo" />
</bean>

위와 같이 정의하면 "/simplemap.do" 요청을 SimpleMapServiceController가 처리하게 된다.

III.Map 기반의 Simpleweb 개발

이번 장에서는 Simpleweb Map Plugin (simpleweb-map) 설치시 생성되는 Sample Application을 중심으로 Map 기반의 Simpleweb을 개발하는 방법에 대해 설명하도록 한다. Map 기반의 Simpleweb을 개발할 때 link/submit/validator/validate tag 등의 사용은 위에서 설명한 VO 기반의 Simpleweb을 개발할 때와 같다. 단, Spring form tag를 사용함에 있어서 modelAttribute와 필드의 path를 정의하는 부분이 달라 지게 된다. VO를 사용하게 되는 경우 modelAttribute의 값은 비즈니스 서비스를 호출 한 후 리턴되는 객체 타입의 camelcase로 정의하게 된다.(ex> Movie 타입의 객체를 리턴할 경우 modelAttribute는 "movie"로 정의) 하지만 Map 방식일 경우 modelAttribute의 이름은 "result"로 정의하도록 한다.

<form:form modelAttribute="result" method="post" ...

또한, 각각의 입력 필드의 path 값은 "map[${key}]"로 정의하도록 한다. 작성 예는 아래와 같다.

<form:input id="title" path="map[title]" id="title".../>
<anyframe:validate id="title" required="true" promptMessage="Enter movie Title." />

이 때, Anyframe validate tag 적용을 위해 "[]"를 제외한 간편한 id를 정의하고 validate tag를 정의하도록 권고한다.