2013년 8월 12일 월요일

[오라클자바community, 스트럿츠스프링강좌]struts2 Type Converter 만들기

struts2 Type Converter 만들기


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)  


 
Struts2에서는 다음과 같은 기본 자료형에 대해서는 Type Converter를 제공한다.
 
String
Bloolean/boolean
Character/char
Integer/int
Float/float
Long/long
Double/double
dates:DateFormat.SHORT 포맷을 사용
arrays
collections:Type이 정해지지 않으면 String으로 간주하고 ArrayList가 생성된다.
 
위에서 정한 Type의 형 변환이 아닌 경우에는 Type Converter를 만들어 형 변환을 해주어야 한다.
 
Type Converter String을 특정한 Type으로 변환하는 변환기이며 OGNL TypeConverter 인터페이스를 구현해서 만든다. 이 인터페이스에는 메소드가 한 개 있는데 String에서 다른 타입으로 바꾸는 것과 다른 타입에서 String으로 바꾸는 것을 한 메소드 안에서 처리해야 하므로 복잡하다. 그래서 Struts2에서는 StrutsTypeConverter라는 추상클래스를 제공하는데 우리는 그걸 상속받아 TypeConverter를 구현하면 되는데 convertFromString(), convertToString() 두 개의 메소드를 구현하면 된다.
 
[EmailConvert.java]
 
package convertor;
 
import java.util.Map;
 
import org.apache.struts2.util.StrutsTypeConverter;
 
import model.Email;
 
public class EmailConverter extends StrutsTypeConverter {
           @Override
           public Object convertFromString(Map context, String[] values, Class toClass) {
                     if (toClass == Email.class) {
                                return Email.parse(values[0]);  //String Email Type으로 변환
                     }
                     return null;
           }
 
           @Override
           public String convertToString(Map context, Object o) {
                     Email email = (Email) o;
                     return email.toString();  //Email Type String으로 변환
           }
}
 
위에서 작성한 클래스 외 Conversion Property 파일이 필요한데 이 파일은 어떤 필드(변수)에 어떤 Converter를 사용할 것인지 정의한 파일이다.
 
[User.java]
 
package model;
 
import java.util.Date;
 
public class User {
           String name;
           int age;
           Date birthday;
           Email email;
 
           public String getName() {
                     return name;
           }
 
           public void setName(String name) {
                     this.name = name;
           }
 
           public int getAge() {
                     return age;
           }
 
           public void setAge(int age) {
                     this.age = age;
           }
 
           public Date getBirthday() {
                     return birthday;
           }
 
           public void setBirthday(Date birthday) {
                     this.birthday = birthday;
           }
 
           public Email getEmail() {
                     return email;
           }
 
           public void setEmail(Email email) {
                     this.email = email;
           }
 
           @Override
           public String toString() {
                     return String.format("[User:name=%s,age=%s,birthday=%s,email=%s]", name, age, birthday,
                                          email);
           }
}
 
[User-Conversion.properties]
 
email = converter.EmailConverter
birthday = converter.DateConverter
 
 
 
이러한 Conversion Property 파일을 만드는 방법은 3가지가 있는데
 
1. 특정 Action에 적용하는 Action Conversion
 
Action클래스이름-conversion.properties 파일을 만들어 Action Class가 있는 패키지에 위치 시킨다.
[CreateUser2-Conversion.properties]
email = converter.EmailConverter
birthday = converter.DateConverter
 
 
2. 특정 도메인 오브젝트에 적용하는 Object Conversion
 
도메인오브젝트명-conversion.properties 파일을 도메인 오브젝트가 있는 패키지에 위치 시킨다.
 
[User-Conversion.properties]
email = converter.EmailConverter
birthday = converter.DateConverter
 
 
3. 전역 Conversion
 
어떤 Type으로 형 변환 할 때 모든 Action이나 도메인 오브젝트에서 같은 방법으로 형 변환 하는 경우 Action, 또는 도메인 오브젝트의 Conversion Property를 정의하지 않고 전역적으로 정의하는 것이 가능하다.
 
클래스패스 루트에 xwork-conversion.properties 라는 파일을 만들면 된다.
 
[xwork-conversion.properties]
 
email = converter.EmailConverter
birthday = converter.DateConverter

댓글 없음:

댓글 쓰기