diff --git a/src/main/java/cokr/xit/foundation/component/AbstractBean.java b/src/main/java/cokr/xit/foundation/component/AbstractBean.java new file mode 100644 index 0000000..3052185 --- /dev/null +++ b/src/main/java/cokr/xit/foundation/component/AbstractBean.java @@ -0,0 +1,3 @@ +package cokr.xit.foundation.component; + +public abstract class AbstractBean extends ManagedComponent {} \ No newline at end of file diff --git a/src/main/java/cokr/xit/foundation/component/AbstractDao.java b/src/main/java/cokr/xit/foundation/component/AbstractDao.java index 0af8d08..635fc4f 100644 --- a/src/main/java/cokr/xit/foundation/component/AbstractDao.java +++ b/src/main/java/cokr/xit/foundation/component/AbstractDao.java @@ -19,6 +19,7 @@ import cokr.xit.foundation.Assert; import cokr.xit.foundation.Log; import cokr.xit.foundation.UserInfo; import cokr.xit.foundation.data.DataObject; +import cokr.xit.foundation.util.DateFormats; /**DAO(Data Access Object)의 베이스 클래스. * @author mjkhan @@ -30,6 +31,8 @@ public abstract class AbstractDao extends EgovAbstractMapper { /** 메시지 소스 */ @Resource(name="messageSource") protected MessageSource messages; + /** 날짜 포맷 모음 */ + protected DateFormats dateFormats = new DateFormats(); /** 로그이름 */ private String logName; /** SQL mapper 네임스페이스 */ diff --git a/src/main/java/cokr/xit/foundation/component/AbstractServiceBean.java b/src/main/java/cokr/xit/foundation/component/AbstractServiceBean.java index da06484..e2cc26b 100644 --- a/src/main/java/cokr/xit/foundation/component/AbstractServiceBean.java +++ b/src/main/java/cokr/xit/foundation/component/AbstractServiceBean.java @@ -13,6 +13,7 @@ import cokr.xit.foundation.ApplicationException; import cokr.xit.foundation.Assert; import cokr.xit.foundation.Log; import cokr.xit.foundation.UserInfo; +import cokr.xit.foundation.util.DateFormats; /**서비스 인터페이스 구현체의 베이스 클래스 *

업무 서비스는 인터페이스로 클라이언트에 노출된다.
@@ -38,6 +39,8 @@ public abstract class AbstractServiceBean extends EgovAbstractServiceImpl { /** 메시지 소스 */ @Resource(name="messageSource") protected MessageSource messages; + /** 날짜 포맷 모음 */ + protected DateFormats dateFormats = new DateFormats(); /** 로그이름 */ private String logName; diff --git a/src/main/java/cokr/xit/foundation/component/ManagedComponent.java b/src/main/java/cokr/xit/foundation/component/ManagedComponent.java new file mode 100644 index 0000000..852955f --- /dev/null +++ b/src/main/java/cokr/xit/foundation/component/ManagedComponent.java @@ -0,0 +1,68 @@ +package cokr.xit.foundation.component; + +import javax.annotation.Resource; + +import org.egovframe.rte.fdl.property.EgovPropertyService; +import org.springframework.context.MessageSource; + +import cokr.xit.foundation.AbstractComponent; +import cokr.xit.foundation.Access; +import cokr.xit.foundation.UserInfo; +import cokr.xit.foundation.util.DateFormats; + +/**spring framework가 관리하는 컴포넌트를 정의할 때 상속받는 클래스. + *

ManagedComponent를 상속받는 클래스는 + *

+ * 등의 기능을 사용할 수 있다. + *

ManagedComponent의 상속 클래스는 '업무 용어 또는 기능 이름' + 'Bean'과 같이 이름을 명시한다.
+ * 그리고 정의한 클래스를 애플리케이션 컨텍스트에 등록하려면, @Component 어노테이션을 적용하고 카멜 표기법으로 이름을 지정한다.
+ * 다음은 그 예이다. + *

 package cokr.xit.example.business.service.bean;
+ * {@code @Component("businessBean")}
+ * public class BusinessBean extends ManagedComponent {
+ *     ...
+ * }
+ *

정의한 컴포넌트를 사용하려면 @Resource 어노테이션에 이름을 명시해 객체에 주입한다. + *

 @Resource(name = "businessBean")
+ * BusinessBean businessBean;
+ */ +public class ManagedComponent extends AbstractComponent { + /** 프로퍼티 서비스 */ + @Resource(name="propertyService") + protected EgovPropertyService properties; + /** 메시지 소스 */ + @Resource(name="messageSource") + protected MessageSource messages; + /** 날짜 포맷 모음 */ + protected DateFormats dateFormats = new DateFormats(); + + /**현재 접근한 사용자를 반환한다. + * @param 사용자 정보 유형 + * @return 현재 접근한 사용자 + */ + @Override + protected T currentUser() { + return UserInfo.current(); + } + + /**현재 사용자의 접근정보를 반환한다. + * @return 현재 사용자의 접근정보 + */ + protected static Access currentAccess() { + return Access.current(); + } + + /**메시지 리소스 파일에서 key로 정의된 문자열과 args로 메시지를 만들어 반환한다. + * @param key 메시지 리소스 파일의 문자열 key + * @param args 해당 문자열에 전달할 인자 + * @return 메시지 + */ + @Override + protected String message(String key, String... args) { + return messages.getMessage(key, ifEmpty(args, () -> null), "", currentAccess().getLocale()); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/foundation/util/DateFormats.java b/src/main/java/cokr/xit/foundation/util/DateFormats.java index a7696a5..bc234c5 100644 --- a/src/main/java/cokr/xit/foundation/util/DateFormats.java +++ b/src/main/java/cokr/xit/foundation/util/DateFormats.java @@ -9,15 +9,15 @@ import cokr.xit.foundation.Assert; public class DateFormats { private static final HashMap dateFormats = new HashMap<>(); + public SimpleDateFormat dateFormat(String pattern) { + return dateFormats.computeIfAbsent(pattern, key -> new SimpleDateFormat(key)); + } + public String format(String pattern, Date date) { if (date == null) return ""; return dateFormat(pattern).format(date); } - private SimpleDateFormat dateFormat(String pattern) { - return dateFormats.computeIfAbsent(pattern, key -> new SimpleDateFormat(key)); - } - public Date parse(String pattern, String str) { if (Assert.isEmpty(str)) return null; diff --git a/src/main/java/cokr/xit/foundation/web/ExceptionController.java b/src/main/java/cokr/xit/foundation/web/ExceptionController.java index db8538b..4ea97ac 100644 --- a/src/main/java/cokr/xit/foundation/web/ExceptionController.java +++ b/src/main/java/cokr/xit/foundation/web/ExceptionController.java @@ -30,7 +30,7 @@ public class ExceptionController extends AbstractController { protected ModelAndView toErrorPage(HttpServletRequest hreq, Object status, String msgKey) { return new ModelAndView("error/errorPage") - .addObject("json", ajaxRequest()) + .addObject("json", ajaxRequest() || jsonResponse()) .addObject("path", getAction(hreq)) .addObject("failed", true) .addObject("status", status)