YJ의 새벽
Spring 11 ( myPage ( 정보수정 ) 본문
--- 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가 알아서 지정해줌. )
'Spring > Spring' 카테고리의 다른 글
Spring 12-1 ( 암호화비밀번호 조회 + 회원탈퇴 ) (0) | 2023.04.28 |
---|---|
Spring 12 ( 비밀번호변경 BCryptPasswordEncoder ) (0) | 2023.04.28 |
Spring 10 ( ajax , 회원목록 뽑아오기 ) (0) | 2023.04.27 |
Spring 9 ( 예외처리 ( 에러페이지 ) ) (0) | 2023.04.27 |
Spring 8 ( 회원가입 ) (0) | 2023.04.26 |