diff --git a/src/main/java/com/eactive/apim/portal/apps/user/controller/UserRegisterController.java b/src/main/java/com/eactive/apim/portal/apps/user/controller/UserRegisterController.java index af4da40..f6f872c 100644 --- a/src/main/java/com/eactive/apim/portal/apps/user/controller/UserRegisterController.java +++ b/src/main/java/com/eactive/apim/portal/apps/user/controller/UserRegisterController.java @@ -113,6 +113,7 @@ public class UserRegisterController { @Valid @ModelAttribute("portalUser") PortalUserRegistrationDTO portalUserRegistrationDTO, BindingResult bindingResult, HttpSession session, + RedirectAttributes redirectAttributes, Model model) { try { if (bindingResult.hasErrors()) { @@ -135,10 +136,10 @@ public class UserRegisterController { setModelForError(session, model, agreement, portalUserRegistrationDTO, response.getMessage()); return MAIN_USER_REGISTER; } - // 성공 시 + // 성공 시 PRG 패턴 적용: 결과 페이지로 리다이렉트 session.removeAttribute("invitationToken"); - model.addAttribute("message", "회원가입이 완료되었습니다."); - return invitationToken != null ? MAIN_EMAIL_COMPLETED : MAIN_REGISTER_RESULT; + redirectAttributes.addFlashAttribute("message", "회원가입이 완료되었습니다."); + return invitationToken != null ? "redirect:/signup/complete/corporate" : "redirect:/signup/complete"; } catch (Exception e) { setModelForError(session, model, agreement, portalUserRegistrationDTO, "처리 중 오류가 발생했습니다: " + e.getMessage()); @@ -146,6 +147,28 @@ public class UserRegisterController { } } + /** + * 개인회원 가입 완료 페이지 + */ + @GetMapping("/signup/complete") + public String showRegistrationComplete(Model model) { + if (!model.containsAttribute("message")) { + return "redirect:/"; + } + return MAIN_REGISTER_RESULT; + } + + /** + * 법인회원 가입 완료 페이지 + */ + @GetMapping("/signup/complete/corporate") + public String showCorporateRegistrationComplete(Model model) { + if (!model.containsAttribute("message")) { + return "redirect:/"; + } + return MAIN_EMAIL_COMPLETED; + } + @GetMapping("/signup/decision") public String showDecisionPage(@RequestParam(name = "invitation", required = false) String invitationToken, HttpSession session, @@ -232,6 +255,7 @@ public class UserRegisterController { BindingResult bindingResult, @RequestParam(name = "invitationToken") String invitationToken, RedirectAttributes redirectAttributes, + HttpSession session, Model model) { agreementValidator.validate(agreement, bindingResult); @@ -253,6 +277,12 @@ public class UserRegisterController { } else { ValidationResponse response = userRegisterFacade.processInvitation(action, invitation.get()); + // 초대 처리 완료 후 세션에서 초대 관련 속성 제거 + session.removeAttribute("pendingInvitation"); + session.removeAttribute("pendingInvitationToken"); + session.removeAttribute("pendingInvitationOrgName"); + session.removeAttribute("decisionToken"); + redirectAttributes.addFlashAttribute("success", response.getMessage()); return "redirect:/"; } diff --git a/src/main/resources/static/js/popup/custom-popups.js b/src/main/resources/static/js/popup/custom-popups.js index 98b2c09..23a4320 100644 --- a/src/main/resources/static/js/popup/custom-popups.js +++ b/src/main/resources/static/js/popup/custom-popups.js @@ -6,7 +6,7 @@ const customPopups = { */ showAlert: function (message, callback) { // 메시지 설정 - $('#customAlertMessage').text(message); + $('#customAlertMessage').html(message); // 팝업 표시 (modal 구조 사용) $('#customAlert').show(); @@ -102,7 +102,7 @@ const customPopups = { // 팝업 내용 설정 $('#passwordPopupTitle').text(title); - $('#passwordPopupMessage').text(message); + $('#passwordPopupMessage').html(message); // 입력 필드 및 에러 초기화 $('#passwordPopupInput').val('').removeClass('error'); @@ -216,7 +216,7 @@ const customPopups = { */ showConfirm: function (message, callback) { // 메시지 설정 - $('#customConfirmMessage').text(message); + $('#customConfirmMessage').html(message); // 팝업 표시 (modal 구조 사용) $('#customConfirm').show(); @@ -302,7 +302,7 @@ const customPopups = { $(document).off('keydown.customConfirmEsc'); }, showEmailValidationPopup: function (message, onConvertCallback, onChangeEmailCallback) { - $('#emailValidationPopupMessage').text(message); + $('#emailValidationPopupMessage').html(message); $('#emailValidationPopup').css('display', 'flex'); $('#emailConvertButton').one('click', function () { @@ -320,7 +320,7 @@ const customPopups = { }); }, showEmailResendPopup: function (message, loginId) { - $('#emailResendMessage').text(message); + $('#emailResendMessage').html(message); $('#userLoginId').val(loginId); $('#emailResend').show(); }, diff --git a/src/main/resources/templates/views/apps/register/userDecisionAccept.html b/src/main/resources/templates/views/apps/register/userDecisionAccept.html index cc022d5..0ee91e6 100644 --- a/src/main/resources/templates/views/apps/register/userDecisionAccept.html +++ b/src/main/resources/templates/views/apps/register/userDecisionAccept.html @@ -1,63 +1,70 @@ - + layout:decorate="~{layout/kjbank_title_layout}">
-