message 태그 사용하기

Property 파일을 사용하여 화면에 특정 메시지를 뿌리는 것을 잘 사용하면 대단히 유연한 페이지를 작성할 수 있습니다. 그 중 하나가 국제화 라고 부르는 internationalizaion 기능입니다. 줄여서 i18n이라고도 하는데요. 국제화 말고도 다른 부분은 전부 고정적인데 특정 부분의 타이틀만 바뀐다거나 하는 경우에도 유용하게 사용할 수 있습니다.

먼저 리소스를 읽어들이고 관리하는 MessageSource를 등록합니다.

    <!– Message Source –>
    <bean id=”messageSource”
        class=”org.springframework.context.support.ResourceBundleMessageSource”
        p:basename=”ApplicationResources” />

다음으로 Resource 파일을 만듭니다. basename에 입력한 값으로 시작하는 프로퍼티 파일을 작성해야 합니다. Resource 파일을 작성할 때 유용한 이클립스 플러그인을 사용하여 작성합니다.

사용자 삽입 이미지
그리고 이제 JSP에서 JSTL의 fmt 태스가 아닌 Spring이 지원하는 message 태그를 사용하여 메시지를 출력할 부분에 프로퍼티의 키값을 사용하여 채워주면 됩니다.
사용자 삽입 이미지
저 태그를 사용하기 위해서는 다음과 같이 taglib을 등록해주면 됩니다.

<%@ taglib prefix=”spring” uri=”http://www.springframework.org/tags” %>

<spring:message> 태그는 code 속성 이외에도 다음과 같은 여러 속성을 가지고 있습니다.

arguments :: 부가적인 인자를 넘겨줄 수 있다. 콤마로 구분된 문자열, 객체 배열, 객체 하나를 넘길 수 있다.
argumentSeparator :: 넘겨줄 인자들의 구분자를 설정한다. 기본값은 콤마
code :: 룩업할 메시지의 키를 지정해줌. 지정하지 않으면 text에 입력한 값을 출력함.
htmlEscape :: 기본값 false. html 기본 escapse 속성을 오버라이딩함.
javaScriptEscape :: 기본값 false.
message :: MessageSourceResolvable 인자로…Spring MVC validation을 거친 errors의 메시지를 쉽게 보여줄 때 사용할 수 있슴.
scope :: 결과 값을 변수에 지정할 때 변수의 scope을 지정할 수 있슴. page, request, session, application으로 지정할 수 있슴.
text :: 해당 code로 가져온 값이 없을 때 기본으로 보여줄 문자열. 빈 값이면 null을 출력함.
var :: 결과 값을 이 속성에 해당한 문자열에 바인딩 할 때 사용. 빈 값이면 그냥 JSP에 뿌려줌.

위의 모든 속성은  Runtime Expression 이라고 하는데 아마 실행 도중에 바뀔 수 있다는 뜻이겠죠?
그리고 모든 속성은 필수 요소들이 아닙니다. 즉 아무것도 지정하지 않아도 되겠지만 그러면 쓸데 없는 코드가 디겠죠.ㅋㅋ

code만 잘 사용해도 좋을 것 같습니다. 불안하면 text와 함께..
그리고 애플리케이션 전역에서 사용할 값이라면 var와 scope=”application”을 사용해보는 것도 좋을 것 같네요. 이때 의문이 드는 것은 매번(1) <spring:message code=”title” /> 로 사용하는 것과 (2) var를 사용하여 <spring:message var=”title” code=”title” scope=”application” />으로 한번 가져와서 EL을 사용하여 ${title} 로 사용하는 것 둘 중에 어느것이 효율적일까 하는 것입니다. 얼핏 (2)번이 더 좋아보이지만 두 방법다 얼마나 비용이 드는지 모르기 때문에 추측과 코딩의 편리함으로 판단할 수 밖에 없겠군요.

사용자 삽입 이미지