Skip to content

spring message #
Find similar titles

Structured data

Category
Programming

서론. ReloadableResourceBundleMessageSource #

개발을 진행하면서 테스트목적 또는 알림 문구 등을 위해 Alert 메시지를 각각 필요한 페이지마다 입력하여 개발을 진행해 본 경험이 있다. 하지만 이렇게 하나하나 페이지마다 메시지를 입력하게 된다면, 공통으로 사용하는 메시지를 하나하나 수정해야 하는 비효율적인 경우가 생기기 때문에 스프링에서 제공하는 ReloadableResourceBundleMessageSource를 이용해서 공통메시지로 처리하는 방법을 추천하는 바이다.

1. ReloadableResourceBundleMessageSource 설정 #

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
 <!-- Encoding 설정 -->
    <property name="defaultEncoding" value="UTF-8"/> 
    <!-- Reload Cache 설정 -->
    <property name="cacheSeconds" value="5"/>
    <!-- basenames 설정: 아래처럼 하면 WEB-INF 밑의 message 폴더 아래의 common-msg 시작하는 모든 Property-->
    <properties name="basenames">
        <list>
            WEB-INF/message/common-msg
        </list>
    </properties>
</bean>
<!-- MessageSource를 사용하기 위한 Accessor 설정 -->
<bean id="messageSourceAccessor" class="org.springframework.context.support.MessageSourceAccessor">
    <constructor-arg ref="messageSource"/>
</bean>

<!-- MessageSource를 사용하기 위한 MessageUtils 매핑 -->
<bean id="message" class="moim.common.util.MessageUtils">
    <property name="messageSourceAccessor" ref="messageSourceAccessor"/>
</bean>

<!-- Default Location 설정 -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
    <property name="defaultLocale" value="ko"></property>
</bean>

기본적인 설정은 각 개발 환경에 맞는 .xml 파일에 MessageSource,MessageSourceAccessor를 설정한다. 한글 출력을 위해 Encoding과 Reload 시간을 설정한다. 이후 basename을 설정하는데, 에서 알 수 있듯이 여러 propertie를 등록할 수 있다. 그리고 MessageSource 사용을 위한 Accessor와 MessageUtils를 등록한다.

2. properties파일 생성 #

common.save=저장하였습니다.
common.idValidate={0}은 {1}로 만 입력해야 합니다.
common.pwdValidate={0}은 {1}자리 이상 {2}자리 이하로 입력해야 합니다.
...

{0} 과 {1} 에는 배열 파라미터로 받아 메시지를 처리하기 위함.

파일 생성 시 주의해야 할 점은 Naming Rule을 지켜야 한다. {basename}_지역언어코드_국가코드.properties 이때 basename은 임의로 지정할 수 있고 위의 예시에서는 message폴더 안에 common-msg라는 basename을 사용하였다. 국가별로 사용할 properties를 생성하게되면 다국어로 메시지를 처리할 수도 있게 된다. {basename}.properties // 시스템의 언어, 지역에 맞는 파일이 없을 경우, 기본사용 {basename}_ko_KR.properties {basename}_us_EN.properties {basename}_uk_EN.properties 결과적으로 이런 파일명으로 생성하면 되겠다.

3. CommonMessageUtils.java파일 생성 #

위에서 설정한 것들을 편히 사용하기 위해 객체를 생성한다. 이때 공통적인 요소들은 각자 편한 이름으로 Naming 한 공통패키지 밑에 묶어서 사용하면 관리에 용이하다.

import java.util.Locale;

import org.springframework.context.support.MessageSourceAccessor;

public class MessageUtils {
    private static MessageSourceAccessor msAcc = null;

    public void setMessageSourceAccessor(MessageSourceAccessor msAcc) {
        MessageUtils.msAcc = msAcc;
    }

    public static String getMessage(String code) {
        return msAcc.getMessage(code, Locale.getDefault());
    }

    public static String getMessage(String code, Object[] objs) {
        return msAcc.getMessage(code, objs, Locale.getDefault());
    }
}

이렇게 만들게 되면 XML에 설정한 요소와 연결이 되어 사용이 용이하다.

4. Java | jsp에서 사용하기 #

Java #

String msg = MessageUtils.getMessage("common.save");
System.out.println("msg : " + msg); // "msg : 저장하였습니다."
String[] args = {"아이디", "영문"};
String msg2 = MessageUtils.getMessage("common.idValidate", args);
System.out.println("msg2 : " + msg2); // "msg2 : 아이디는 영문으로만 입력해야합니다."
String[] args2 = {"암호는", "6","10"};
String msg3 = MessageUtils.getMessage("common.pwdValidate",arg2);
System.out.println("msg3 : " + msg3); // "msg3 : 암호는 6자리 이상 10자리 이하로 입력해야합니다."

배열 파라미터를 통해 순서에 맞춰 출력할 수 있다.

jsp #

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<spring:message code="common.save"></spring:message>
<spring:message code="common.idValidate" arguments="아이디, 영문"></spring:message>
<spring:message code="common.pwdValidate" arguments="암호,6,10"></spring:message>

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>를 추가하여 사용할 수 있다.

참고출처 #

YONG-MIN

관련 키워드 #

Spring ReloadableResourceBundleMessageSource

0.0.1_20140628_0