삭제
boardRepository.deleteById(no);
deleteById
는 void 속성을가지기 때문에 리턴값이 없다.수정
수정 클릭시 화면 전환
session으로 radio를 통해 넘어온 value값인 no를 넘김
: httpSession.setAttribute("NO", no);
@GetMapping
으로 넘어간 페이지 표시
: POST에서 GET으로 데이터 전송 방법 세가지
3-1. GET) boardRepository.findById(no)
사용
: session에서 no를 꺼내서 사용
: POST) httpSession.setAttribute("no", no);
3-2. GET) @RequestParam(name = "no1") long no1
사용
: 파라미터로 받은 no1 사용
: POST) redirectAttributes.addAttribute("no1", no);
3-3. GET) HttpServletRequest httpServletRequest
사용
: Map으로 꺼냄, Map 자체도 일회성
: session에 숨겨서 보낸 no2 사용. 일회성, 휘발성
: POST) redirectAttributes.addFlashAttribute("no2", no);
Optional => null에 대한 처리
: Board list = boardRepository.findById(no).orElse(null);
: null이 아니면 Boarf 타입으로 꺼냄
수정 수행
: 추가 => 기본키를 다르게해서 저장
: 수정 => 기본키에 해당하는 글번호를 동일하게 해서 새로 저장
5-1. try_catch로 묶음
: 보통 리턴값을 주기보다 try_catch로 묶어서 사용하면 오류 처리가 더 쉽다
5-2. 기존 내용을 읽음 (board1)
: Board board1 = boardRepository.findById(board.getNo()).orElse(null);
: Optional 처리 => null에 대한 처리를 위해 orElse(null)
를 사용
5-3. 변경할 항목만 다시 저장
: board1.setTitle(board.getTitle());
: board1.setContent(board.getContent());
: board1.setWriter(board.getWriter());
5-4. 기존내용 + 변경항목 부분 = board1을 save함
: Board response = boardRepository.save(board1);
POST - 실제 수정 수행
// 수정 수행
@PostMapping(value = "/update")
public String updatePOST(
Model model,
@ModelAttribute Board board) {
try {
// 1. 기존내용을 읽음
Board board1 = boardRepository.findById(board.getNo()).orElse(null);
// 2. 변경할 항목만 다시 저장
board1.setTitle(board.getTitle());
board1.setContent(board.getContent());
board1.setWriter(board.getWriter());
// 3. 기존내용 + 변경항목 부분을 save함
Board response = boardRepository.save(board1);
System.out.println("response ===> " + response);
model.addAttribute("msg", board.getNo() + "번 글 수정되었습니다.");
model.addAttribute("url", "/board/selectlist");
return "alert";
} catch (Exception e) {
e.printStackTrace();
return "redirect:/home";
}
}
POST - /action
else if (btn.equals("1개수정")) {
// 세션사용
httpSession.setAttribute("no", no);
// GET방식) 1회성 전송, url에 parameter로 붙임 => url에 붙이기 때문에 노출됨
redirectAttributes.addAttribute("no1", no);
// POST방식) 세션에 숨겨서 보내기 => 1회성, 휘발성 => 새로고침시 데이터는 소멸
redirectAttributes.addFlashAttribute("no2", no);
System.out.println("1개수정");
return "redirect:/board/update";
}
GET
// 수정 화면
@GetMapping(value = "/update")
public String updateGET(
Model model,
@RequestParam(name = "no1") long no1,
HttpServletRequest httpServletRequest) {
// 1. POST에서 세션으로 받은 no => httpSession.getAttribute로 받음
long no = (long) httpSession.getAttribute("no");
System.out.println("no ===> " + no);
// 2. POST에서 파라미터로 받은 no1 => requestpram으로 받음
System.out.println("no1 ===> " + no1);
Map<String, ?> map = RequestContextUtils.getInputFlashMap(httpServletRequest);
if (map != null) {
long no2 = (long) map.get("no2");
// 3. POST에서 세션에 숨겨서 받은 no2 => Map으로 받음
System.out.println("no2 ===> " + no2);
}
// Optional => null에 대한 처리
// Optional<Board> response = boardRepository.findById(no);
// Board list = response.get();
// 한줄로 줄여짐
Board list = boardRepository.findById(no).orElse(null);
model.addAttribute("list", list);
// System.out.println("model ===> " + model);
return "board/update";
}
전체 코드
// 수정/삭제
@PostMapping(value = "/action")
public String actionPOST(
Model model,
RedirectAttributes redirectAttributes, // Post에서 Get으로 데이터 전송
@RequestParam(name = "btn") String btn,
@RequestParam(name = "radio") long no) {
try {
// System.out.println("btn ===> " + btn);
// System.out.println("no ===> " + no);
if (btn.equals("1개삭제")) {
boardRepository.deleteById(no);
// System.out.println(no + "번 삭제 성공");
model.addAttribute("msg", no + "번 글 삭제되었습니다.");
model.addAttribute("url", "/board/selectlist");
return "alert";
} else if (btn.equals("1개수정")) {
// 이동
// 세션사용
httpSession.setAttribute("no", no);
// GET방식) 1회성 전송, url에 parameter로 붙임 => url에 붙이기 때문에 노출됨
redirectAttributes.addAttribute("no1", no);
// POST방식) 세션에 숨겨서 보내기 => 1회성, 휘발성 => 새로고침시 데이터는 소멸
redirectAttributes.addFlashAttribute("no2", no);
System.out.println("1개수정");
return "redirect:/board/update";
}
return "redirect:/board/selectlist";
} catch (Exception e) {
e.printStackTrace();
return "redirect:/home";
}
}