본문 바로가기

개발/Spring

Spring message 태그를 이용한 메세지 관리, spring:message의 일곱 가지 속성

Spring message 태그를 이용한 메세지 관리

아래 예와 같이 HTML이 Title에 대한 일관성을 확보하기 위하여 JSP 에서 Title 태그에 문자열을 그대로 입력하지않고 메세지 소스를 이용한다. 

<title><spring:message code="${pageTitle}" text="Logged Out" /></title>
<label for="username"><spring:message code="screen.welcome.label.netid" /></label>

ㅁ ResourceBundleMessageSource 사용하기
    - Spring 프레임워크 웹 어플리케이션에서 MessageSource 소스 관리를 위하여
     ResourceBundleMessageSource을 사용한다.

    - 보통 메세지 .properties 파일들이 WEB-INF/classes 디렉토리에 모여져 있다.
    
     - MessageSource가 변경될 경우 MessageSource 를 반영할려면 애플리케이션 서버를 재시작해야한다.
    

더보기



ㅁ ReloadableResourceBundleMessageSource 사용하기 - 이것이 아주 유용한듯
    - 
애플리케이션 서버는 클래스패스에 있는 모든 리소스르 캐싱한다. 따라서 파일이 변경되더라도 적용되지
        않는다. 그러나  ReloadableResourceBundleMessageSource 를 사용하면 MessageSource가 
        변경되어도 애플리케이션을 재시작할 필요가 없다.

     - ReloadableResourceBundleMessageSource 를 사용하기 위해서는 WEB-INF/classes 디렉토리가 
        아닌 다른 디렉토리에서 MessageSource 파일을 관리해야 한다. (예 :  WEB-INF/message)
 

접기

<bean id="messageSource" class="org.springframework.context.
                                                   support.ReloadableResourceBundleMessageSource"
>
    <property name="basenames">
        <list>
            <value>/WEB-INF/messages/DBQuery</value>
            <value>/WEB-INF/messages/Messages</value>
        </list>
    </property>
    <property name="cacheSeconds" value="5"/>
</bean>

접기


    - 파일 변경 확인을 위한 모니터링 시간 설정 [property name="cacheSeconds" value="5"]

ㅁ 클래스패스가 아닌 filesystem 경로 로딩하기
    - 웹 애플리케이션이 아닌 경우 filesystem 경로 로딩할 경우 클래스 패스를 추가하거나 절대경로를 지정해
       주어도 된다.

    - ResourceBundleMessageSource 에선 사용할 수 없었던 file: 을
      ReloadableResourceBundleMessageSource의 basenames에서는 사용할 수 있다.

접기

<bean id="messageSource" 
          class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>file:E:/svn/71common/htdocs/WEB-INF/classes/messages/messages_appr_msg</value>
</list>
</property>
<property name="cacheSeconds" value="0"/>
</bean>

접기









추가내용


html 코드에서 위에 설정한 메시지를 사용.

<tr>
    <td width="150" class="ct_td"><spring:message code="movie.title" />&nbsp;*</td>
    <td bgcolor="D6D6D6" width="1"></td>
    <td class="ct_write01">
        <form:input path="title" cssClass="ct_input_g" cssErrorClass="text medium error" size="40" maxlength="50" />
        <form:errors path="title" cssClass="errors" />
    </td>
</tr>


spring:message에는 다음 7가지가 있습니다.

code:          fmt:message의 key에 해당

arguments:                리소스 번들의 메시지에 {0}, {1} 같은 기호 자리에 들어갈 값을 나열

argumentSeparator:    arguments 속성에 값을 구분하는 기호, 기본은 콤마(',') 

text:                          code에 해당하는 메시지가 리소스 번들에 없을 때 사용될 메시지

message:                  MessageSourceResolvable 인터페이스를 구현한 객체 또는 MessageSourceResolvable를 나타내는 spel 식. 에러 메시지를 표시하려고 한다면 필요하겠죠.

htmlEscape:              true일 때 HTML 엔티티를 인코딩

javaScriptEscape:      true일 때 자바스크립트 문자열로 인코딩 

var:                           fmt:message와 동일

scope:                      fmt:message와 동일


출처: https://groups.google.com/forum/#!topic/ksug/elQOAa2-53Y