#16-削除/変更
削除try catch使用理由
:
コントローラがエラーを投げ出すため、コントローラはtry catchを使用してエラーを処理する必要があります. 変更
[修正]をクリックして画面を切り替えます
radioによるsessionへの値noの伝達
:
:POSTからGETにデータを転送する方法
3-1. GET)
:セッションからnoを取り出して使用
: POST)
:パラメータを使用して受信したno 1
: POST)
:Mapでポップアップし、Map自体も使い捨て
:セッションで送信されないno 2を使用します.使い捨て
: POST)
Optional=>nullの処理
:
変更の実行
:追加=>異なるプライマリ・キーの保存
:変更=>プライマリ・キーと同じ新しい文書番号を保存
5-1. try catchで縛る
:try catchを使用すると、通常の戻り値を使用するよりもエラーが発生しやすい
5-2. 既存コンテンツの読み込み(ボード1)
:
5-3. 変更内容のみ保存
:
: POST-実際の修正を実行する
:
boardRepository.deleteById(no);
このコードを使用すると、no部分がlongタイプになります.これがRepository設定の理由です.コントローラがエラーを投げ出すため、コントローラはtry catchを使用してエラーを処理する必要があります.
deleteById
は、void属性を持つため、戻り値がありません.[修正]をクリックして画面を切り替えます
radioによるsessionへの値noの伝達
:
httpSession.setAttribute("NO", no);
@GetMapping
に移動したページを表示:POSTからGETにデータを転送する方法
3-1. GET)
boardRepository.findById(no)
使用:セッションからnoを取り出して使用
: POST)
httpSession.setAttribute("no", no);
3-2. GET)@RequestParam(name = "no1") long no1
使用:パラメータを使用して受信したno 1
: POST)
redirectAttributes.addAttribute("no1", no);
3-3. GET)HttpServletRequest httpServletRequest
使用:Mapでポップアップし、Map自体も使い捨て
:セッションで送信されないno 2を使用します.使い捨て
: POST)
redirectAttributes.addFlashAttribute("no2", no);
Optional=>nullの処理
:
Board list = boardRepository.findById(no).orElse(null);
:nullまたはBoarf以外のタイプ変更の実行
:追加=>異なるプライマリ・キーの保存
:変更=>プライマリ・キーと同じ新しい文書番号を保存
5-1. try catchで縛る
:try catchを使用すると、通常の戻り値を使用するよりもエラーが発生しやすい
5-2. 既存コンテンツの読み込み(ボード1)
:
Board board1 = boardRepository.findById(board.getNo()).orElse(null);
:使用orElse(null)
処理Optional処理=>null5-3. 変更内容のみ保存
:
board1.setTitle(board.getTitle());
: board1.setContent(board.getContent());
: board1.setWriter(board.getWriter());
5-4. 既存コンテンツの保存+変更部分=ボード1:
Board response = boardRepository.save(board1);
// 수정 수행
@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 -/actionelse 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";
}
}
Reference
この問題について(#16-削除/変更), 我々は、より多くの情報をここで見つけました https://velog.io/@aro9515/Spring-16-삭제-수정テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol