1. Spring message 처리
<!-- ❌ 이렇게 하면 안됨 -->
alert("저장되었습니다."); // 하드코딩된 메시지
<!-- ⭕ 이렇게 해야 다국어 처리됨 -->
alert('<spring:message code="message.save.success" />');
<!-- 🤔 변수 들어가는 메시지는 이렇게 -->
alert('<spring:message code="message.save.count" arguments="${count}" />');
실수한 것들:
jsp 파일에서 스크립트 분리할 때 message 처리
// 방법 1: 변수로 먼저 선언
<script>
const MSG_SAVE = '<spring:message code="message.save.success" />';
const MSG_DELETE = '<spring:message code="message.delete.success" />';
function save() {
// ... 저장 로직
alert(MSG_SAVE);
}
</script>
// 방법 2: 데이터 속성 활용
<button data-msg='<spring:message code="message.save.success" />'>
저장
</button>
$('button').click(function() {
alert($(this).data('msg'));
});
2. Form Submit 처리
처음에는 순수하게 했다가 실수함:
// ❌ 이러면 validation 무시됨
$("#searchFrm").submit();
// ⭕ 이렇게 하자
if($("#searchFrm")[0].checkValidity()) {
// 1. action 설정
$("#searchFrm").attr("action", "/api/search");
// 2. 추가 파라미터 있으면 hidden으로
$("<input>").attr({
type: "hidden",
name: "extraParam",
value: "extraValue"
}).appendTo("#searchFrm");
// 3. submit
$("#searchFrm").submit();
}
3. Ajax 통신
이것도 패턴화 시켜놨다:
function callAjax(url, param) {
$.ajax({
url: url,
type: 'POST',
data: JSON.stringify(param),
contentType: 'application/json',
beforeSend: function() {
// 로딩 표시 (이거 깜빡하면 사용자가 불편...)
showLoading();
},
success: function(result) {
if(result.success) {
// 성공 메시지는 다국어로!
alert('<spring:message code="message.save.success" />');
} else {
// 서버 메시지 그대로 표시 (이미 다국어 처리되어 옴)
alert(result.message);
}
},
error: function(xhr) {
// 서버 에러는 공통 메시지로
alert('<spring:message code="message.server.error" />');
console.error(xhr);
},
complete: function() {
// 로딩 제거 (이것도 깜빡하지 말자...)
hideLoading();
}
});
}
// 사용할 때
callAjax('/api/save', {
id: '123',
name: '홍길동'
});
4. 자주 까먹는 것들
1. form serialize 할 때
// ❌ 이러면 배열 데이터 못 받음
const param = $("#searchFrm").serialize();
// ⭕ 배열도 처리되게
const param = $("#searchFrm").serializeArray();
2. 다국어 동적 메시지
// messages.properties
message.confirm.delete="{0}을(를) 삭제하시겠습니까?"
// javascript
const msg = '<spring:message code="message.confirm.delete" arguments="${name}" />';
if(confirm(msg)) {
// 삭제 처리
}
✅ 메모
- 메시지는 무조건 다국어로 (나중에 고생...)
- form submit 전에는 validation 체크
- ajax 통신할 때 로딩 처리 필수
- serialize 쓸 때 배열 데이터 주의
'개발노트 > Spring' 카테고리의 다른 글
[Spring] Security 인증(Authentication) 흐름 정리 (1) | 2025.02.18 |
---|---|
[Spring Boot + Vue.js 시리즈 2편] STS4와 Vue.js 연동하기 (1) | 2025.02.14 |
[Spring] selectByPk 메서드 (1) | 2025.01.10 |
[Spring] SiteMesh - decorators.xml로 공통 레이아웃 관리 (0) | 2025.01.02 |