message 태그 사용하기
Property 파일을 사용하여 화면에 특정 메시지를 뿌리는 것을 잘 사용하면 대단히 유연한 페이지를 작성할 수 있습니다. 그 중 하나가 국제화 라고 부르는 internationalizaion 기능입니다. 줄여서 i18n이라고도 하는데요. 국제화 말고도 다른 부분은 전부 고정적인데 특정 부분의 타이틀만 바뀐다거나 하는 경우에도 유용하게 사용할 수 있습니다.
먼저 리소스를 읽어들이고 관리하는 MessageSource를 등록합니다.
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename="ApplicationResources" />
다음으로 Resource 파일을 만듭니다. basename에 입력한 값으로 시작하는 프로퍼티 파일을 작성해야 합니다. Resource 파일을 작성할 때 유용한 이클립스 플러그인을 사용하여 작성합니다.
그리고 이제 JSP에서 JSTL의 fmt 태스가 아닌 Spring이 지원하는 message 태그를 사용하여 메시지를 출력할 부분에 프로퍼티의 키값을 사용하여 채워주면 됩니다.
저 태그를 사용하기 위해서는 다음과 같이 taglib을 등록해주면 됩니다.
<spring:message> 태그는 code 속성 이외에도 다음과 같은 여러 속성을 가지고 있습니다.
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)번이 더 좋아보이지만 두 방법다 얼마나 비용이 드는지 모르기 때문에 추측과 코딩의 편리함으로 판단할 수 밖에 없겠군요.