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
댓글 없음:
댓글 쓰기