trouble shooting
#회원수정 오류
package com.topflix.action;
import com.topflix.domain.User;
import com.topflix.repository.UserRepository;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class UpdateUserOKAction implements Action {
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
UserRepository userRepository = new UserRepository();
request.setCharacterEncoding("UTF-8");
String email = request.getParameter("email");
String newPassword = request.getParameter("password");
String newPhone = request.getParameter("phone");
User user = userRepository.getUserByEmail(email);
HttpSession session = request.getSession();
if (user != null) {
if (newPassword != null && !newPassword.trim().isEmpty()) {
user.setPassword(newPassword);
}
if (newPhone != null && !newPhone.trim().isEmpty()) {
user.setPhone(newPhone);
}
int updateResult = userRepository.update(user);
if (updateResult > 0) {
session.setAttribute("message", "회원수정이 완료되었습니다.");
return "myPage.do";
} else {
session.setAttribute("message", "회원수정에 실패했습니다. 다시 시도해주세요.");
return "updateUser.do";
}
} else {
session.setAttribute("message", "사용자를 찾을 수 없습니다.");
return "updateUser.do";
}
}
}
회원 수정이 안됨 (오류원인도 모르겠음)
String newPhone = request.getParameter("phone");
User user = userRepository.getUserByEmail(email);
이 사이에 아래 코드 넣어서 프린트해봄
System.out.println("Received email: " + email);
System.out.println("Received password: " + newPassword);
System.out.println("Received phone: " + newPhone);
email 값이 null 이어서 그랬다
원래 jsp 코드는 아래와 같았는데
<body>
<%@ include file="/includes/header.jsp" %>
<div class="form-container">
<h1 style="color:white;">회원수정</h1>
<form action="updateUserOK.do" method="post">
<div class="input-group">
<label>이메일</label>
<span>${user.email}</span>
</div>
<div class="input-group">
<label>이름</label>
<span>${user.name}</span>
</div>
<div class="input-group">
<input type="password" name="password" placeholder="비밀번호" required class="full-width">
</div>
<div class="input-group">
<input type="password" name="confirm_password" placeholder="비밀번호 확인" required class="full-width">
</div>
<div class="input-group">
<input type="text" name="phone" placeholder="핸드폰 번호" required class="full-width">
</div>
<div class="input-group">
<label>생년월일</label>
<span>${user.birthday}</span>
</div>
<button type="submit" id="btn-submit" class="btn-submit">수정하기</button>
<button type="button" id="btn-cancel" class="btn-cancel" onclick="window.location.href='mainPage.jsp';">취소</button>
<div id="password-feedback"></div>
</form>
</div>
<%@ include file="/includes/footer.jsp" %>
</body>
<label>이메일</label>
<span>${user.email}</span>
코드 밑에
아래 코드 한줄을 추가해서 해결
<input type="hidden" name="email" value="${user.email}">
*input type="hidden"
폼 제출 시 사용자 눈에 보이지않게 데이터를 서버로 전달가능
#세션 속성 일관성 지키지 않아서
로그인 액션 (SignInOKAction.class) 에
로그인 시 세션에 사용자 이메일을 "userEmail" 로 저장
session.setAttribute("userEmail", email);
며칠 후, 회원탈퇴 액션 (DeleteUserOKAction.class) 에
탈퇴 시 세션 만료 시킬 때 현재 로그인된 사용자 이메일을 세션에서 가져오려는데
String email = (String) session.getAttribute("email");
로 하는 바람에 계속 세션이 안가져와졌다
getAttribute("userEmail"); 로 변경하고 해결함
email, user_email, userEmail 등 컬럼명 변수명 속성명 이 비슷한게 많아서 헷갈렸음,,
세션 안 가져와지면 세션 속성 이름 맞게 되어있는지 확인 해보기,,