YJ의 새벽

Spring 11 ( myPage ( 정보수정 ) 본문

Spring/Spring

Spring 11 ( myPage ( 정보수정 )

YJDawn 2023. 4. 28. 15:50

 

 

 

 

 

--- myPage 들어가기 전 맵핑하는 xml 하나 만들어주자. 

 

 

 

 

 

 

--- mybatis-config.xml 에서 맵핑. 

 

 

 

 

 

 

 

-- 정보수정에 필요한 값 

 -닉네임

 -전화번호

 -주소

 -회원번호  ( Session  --> 로그인한 회원정보 통해서 얻어오기 )

     --> @SessionAttributes  , @ModelAttribute  필요

 

@SessionAttributes

  - -Model에 세팅된 데이터의 Key와    

   @SessionAttributes 에 작성된 Key가 같으면

    Model 세팅된 데이터를   request --> session scope 로 이동.

  -- 기존에 session scope 에 이동시킨 값을 얻어오는 역할 :: 

      ex )  @ModelAttribute("loginMember") Member loginMember

            -- @SessionAttributes 를 통해 session scope에 등록된 값을 얻어와 Member loginMember 변수에 대입.

            -- 클래스 위에 @SessionAttributes({"loginMember"})  작성. 

 

*** 매개변수를 이용해서  session , 파라미터 데이터를 동시에 얻어올때 문제점  ***

   -session 에서 객체를 얻어오기 위해 매개변수에 작성한 상태에서   

          ( ex ..  @ModelAttribute("loginMember") Member loginMember    )

   - 파라미터의 name 속성값이 매개변수에 작성된 객체 (loginMember) 의 필드와 일치하면 

     session에서 얻어온 객체의 필드에 덮어쓰기가 된다 . !! 

   - 해결방법 !!!! 파라미터의 name 속성을 변경하여 겹치지 않게 하자 .

 

 

 

 

 

 

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

--- myPage-info . jsp  를 참고해보자 . 

 

 

 

 

 

 

--- MyPageController   클래스 .   

//   /member/myPage/profile
//   /member/myPage/info
//   /member/myPage/changePw
//   /member/myPage/secession
@Controller
@RequestMapping("/member/myPage")
@SessionAttributes({"loginMember"}) // session scope 에서 loginMember 를 얻어옴 
public class MyPageController {
	
	@Autowired
	private MyPageService service;
	
	// 회원 정보 조회 이동
	@GetMapping("/info")
	public String info() {
		return "member/myPage-info";
	}
	
	// 비밀번호 변경 이동
	@GetMapping("/changePw")
	public String changePw() {
		return "member/myPage-changePw";
	}

	// 회원 탈퇴 이동
	@GetMapping("/secession")
	public String secession() {
		return "member/myPage-secession";
	}
	
	// 프로필 변경 이동
	@GetMapping("/profile")
	public String profile() {
		return "member/myPage-profile";
	}
	
	// 회원 정보 수정 
	@PostMapping("/info")
	public String updateInfo( @ModelAttribute("loginMember") Member loginMember , 
							@RequestParam Map<String, Object> paramMap ,
							   // 요청시 전달된 파라미터를 구분않고 모두 Map에 담아서 얻어옴
							String[] updateAddress,
							RedirectAttributes ra
			) {
		String memberAddress = String.join(",,", updateAddress);  // 파라미터를 저장한 paramMap 에 회원번호, 주소를 추가
		
		if ( memberAddress.equals(",,,,"))  memberAddress = null;   // 주소 미입력시
		
		paramMap.put("memberNo", loginMember.getMemberNo());
		paramMap.put("memberAddress", memberAddress);
		
		int result = service.updateInfo(paramMap);    // 회원 정보 수정 서비스 호출
		
		if ( result > 0 ) {
			ra.addFlashAttribute("message","회원정보가 수정되었습니다");
			
			//  DB - Session의 회원정보 동기화 
			loginMember.setMemberNickname((String)paramMap.get("updateNickname"));
			loginMember.setMemberTel((String)paramMap.get("updateTel"));
			loginMember.setMemberAddress((String)paramMap.get("memberAddress"));
		}else {
			ra.addFlashAttribute("message","회원정보 수정실패");
		}
		return "redirect:info";
	}
}

 

 

 

 

 

 

--- MyPageServiceImpl 클래스 

@Service
public class MyPageServiceImpl implements MyPageService {

	@Autowired
	private MyPageDAO dao;
	
	// 회원 정보 수정 서비스 구현
	@Override
	public int updateInfo(Map<String, Object> paramMap) {
		return dao.updateInfo(paramMap);
	}
}

 

 

 

---MyPageDAO 클래스

@Repository
public class MyPageDAO {
	
	@Autowired
	private SqlSessionTemplate sqlSession;
	
	/**  회원 정보 수정 DAO
	 * @param paramMap
	 * @return  result
	 */
	public int updateInfo(Map<String, Object> paramMap) {
		return sqlSession.update("myPageMapper.updateInfo",paramMap);
	}
}

 

 

 

 

 

--- myPage-mapper.xml  파일.

  *** 파라미터 타입이 map 인 경우 ***

    1)   parameterType="java.util.Map"

    2)   parameterType="map" (별칭)

    3)   생략.    ( TypeHandler가 알아서 지정해줌. )   

 

 

 

 

 

 

 

 

 

 

 

Comments