본문 바로가기
개발공부/Spring

[Spring] 스프링 레거시 프로젝트에서 Message 사용하기

by 양히◡̈ 2023. 12. 10.

Config 파일에서 MessageSource를 스프링의 Bean으로 등록한다.

@Configuration
public class MessageConfig {

	@Bean
	public MessageSource messageSource() {
		ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
		// base Message
		messageSource.setBasename("classpath:/messages");
		// 언어 설정
		messageSource.setDefaultEncoding("UTF-8");
		// 메세지 소스 캐시하는 최대 시간
		messageSource.setCacheSeconds(1);
		// 찾는 값이 없을 때 기본 메세지로 대체 여부
		// messageSource.setUseCodeAsDefaultMessage(true);

		return messageSource;
	}
}

 

messageSource.setBasename에 지정한 경로에 properties 파일을 만든다.

# 처리 결과 result
result.save.success=저장되었습니다.
result.regist.success=등록되었습니다.
result.modify.success=수정되었습니다.
result.delete.success=삭제되었습니다.
result.custom.success={0} 완료되었습니다.
result.fail=처리에 실패했습니다.

# 유효성 검사 valid
valid.pattern={0} 형식을 확인해주세요.
valid.select={0} 선택해주세요.
valid.input={0} 입력해주세요.

valid.date.compare=시작 날짜가 종료 날짜보다 클 수 없습니다.
valid.date.term=날짜의 범위는 {0}개월을 초과할 수 없습니다.
valid.file.amount={0}개 까지만 등록 가능합니다.
valid.file.format={0} 파일만 등록 가능합니다.
valid.element.amount=최대 {0}{1}까지 가능합니다.

valid.product.amount=재고가 부족합니다. 최대 {0}개까지 구매 가능합니다.
valid.terms.consent=이용약관 동의를 체크해주세요.
valid.coupon.use=이미 적용된 쿠폰입니다.

# 질문 confirm
confirm.custom={0} 하시겠습니까?
confirm.save=저장 하시겠습니까?
confirm.modify=수정 하시겠습니까?
confirm.regist=등록 하시겠습니까?
confirm.delete=삭제 하시겠습니까?

 

 

Java에서 사용시

@Autowired
MessageSource messageSource;

messageSource.getMessage("result.fail", new String[], null);

getMessage는 첫 번째 인자로 코드를, 두 번째 인자로 인자를 문자열 배열로 전달, 마지막은 locale이다 (ko, en 같은)

 

 

JSP에서 사용시 (taglib 필수)

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

...
<script>
	alert('<spring:message code="valid.file.format"/>');
</script>
...

alert 말고 body에서도 사용 가능! 방법은 동일하다.

만약 인자를 넘겨줘야 하면 arguments="" 속성에 넣으며, 여러개일 경우 쉼표로 구분한다.

 

 

 

 

 

이렇게 Bean을 등록해서 사용했으나

@Autowired로 주입한 후 getMessage를 사용하는 방법보다 유틸 클래스에서 getMessage를 재정의하여 사용하는 게 더 편리해서 결국 유틸 클래스를 이용하는 방법으로 바꾸었다.

getMessage의 인자를 하나만, 두개, 세개를 넣을 수 있도록 각각 오버로딩해서 사용하면 MessageUtil.getMessage("result.fail"); 형태로 사용이 가능해 더 간편한 것 같다 ◡̈

댓글