스프링부트 팀플) 20240318_수정/삭제 비밀번호 확인 + 삭제 경고창 + 정렬
https://codingbroker.tistory.com/42
[HTML, JAVASCRIPT] 브라우저에서 확인창, 경고창 띄우는 법 - confirm
confirm 브라우저 창에서 확인창, 경고창 띄우기 구문 result = window.confirm(message); message 확인창에 띄울 문구 result 사용자가 '확인'을 누르면 true / '취소'를 누르면 false 예시 버튼을 클릭하면 배경화
codingbroker.tistory.com
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>게시판 글 삭제 확인</title>
<script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
</head>
<body>
<form id="board" action="<c:url value='/deletePost'/>" method="post">
<input type="hidden" id="boardNum" name="boardNum" value="${dto.boardNum}">
글 삭제를 위해 비밀번호를 입력해주세요.<br>
<input type="text" id="password" name="password">
<div id="falsePW"></div>
<input id="ajaxCheck" type="button" value="제출">
<input id="goBack" type="button" value="취소">
</form>
<script type="text/javascript">
$(function(){
$("#ajaxCheck").on("click", function(){
var boardNum = $("#boardNum").val()
var password = $("#password").val()
$.ajax({
type: "POST",
url: "<c:url value='/checkPostPW'/>",
data: {
boardNum: boardNum,
password: password,
},
success: function(response) {
if(response == "yes"){
if(window.confirm("정말로 삭제하시겠습니까?\n삭제된 게시물은 복구할 수 없습니다.")){
$("#board")[0].submit();
} else (
window.history.go(-1)
)
} else {
$("#falsePW").text("비밀번호가 다릅니다.");
}
},
error: function(error) {
console.error("추천 기능 에러:", error);
}
})
})
$("#goBack").on("click", function(){
window.history.go(-1)
})
})
</script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p"
crossorigin="anonymous"></script>
</body>
</html>
- delete 페이지
//글 수정 / 글 삭제 시 비밀번호 확인
@PostMapping("/checkPostPW")
public String checkPostPW(int boardNum, String password) {
DebugBoardDTO dto = dServ.viewDBoardContent(boardNum);
if(dto.getPassword().equals(password)) {
return "yes";
} else {
return "no";
}
}
ajax 출력
package com.moonBam.controller.member;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;
import com.moonBam.dto.DebugBoardDTO;
import com.moonBam.service.member.DebugBoardService;
@Controller
public class DebugBoardController {
@Autowired
DebugBoardService serv;
//게시판 글 목록 보기
@GetMapping("/viewDBoardList")
public ModelAndView viewDBoardList() {
List<DebugBoardDTO> list = serv.viewDBoardList();
ModelAndView mav = new ModelAndView();
mav.addObject("list", list);
mav.setViewName("member/Test/viewDBoardList");
return mav;
}
//게시판 글 쓰기 화면으로 이동
@GetMapping("/newPost")
public ModelAndView newPost() {
ModelAndView mav = new ModelAndView();
mav.setViewName("member/Test/newPost");
return mav;
}
//게시판 글 등록(PRG 패턴을 통해 중복 등록 방지)
@PostMapping("/insertPost")
public ModelAndView insertPost(DebugBoardDTO dto) {
System.out.println(dto);
// 현재 날짜와 시간을 dto에 입력
Date now = new Date();
dto.setPostDate(now);
serv.insertPost(dto);
List<DebugBoardDTO> list = serv.viewDBoardList();
ModelAndView mav = new ModelAndView();
mav.addObject("list", list);
mav.setViewName("redirect:/viewDBoardList");
return mav;
}
//게시판 글 보기
@GetMapping("/viewDBoardContent/{bNum}")
public ModelAndView viewDBoardContent(@PathVariable("bNum") int boardNum) {
DebugBoardDTO dto = serv.viewDBoardContent(boardNum);
//게시판 글 조회수 올리기
serv.updateDBoardViewCount(boardNum); //조회수 증가 안 됨 - 이유 모름
System.out.println(dto);
ModelAndView mav = new ModelAndView();
mav.addObject("dto", dto);
mav.setViewName("member/Test/viewDBoardContent");
return mav;
}
//게시판 글 수정하기 전 비밀번호 확인
@GetMapping("/checkUpdatePost/{bNum}")
public ModelAndView checkUpdatePost(@PathVariable("bNum") int boardNum) {
DebugBoardDTO dto = serv.viewDBoardContent(boardNum);
ModelAndView mav = new ModelAndView("member/Test/checkUpdatePost");
mav.addObject("dto", dto);
return mav;
}
//게시판 글 수정화면으로 이동
@PostMapping("/checkUpdatePost/modifyPost")
public ModelAndView modifyPost(int boardNum) {
DebugBoardDTO dto = serv.viewDBoardContent(boardNum);
ModelAndView mav = new ModelAndView();
mav.addObject("dto", dto);
mav.setViewName("member/Test/modifyPost");
return mav;
}
//게시판 글 수정하기
@PostMapping("/checkUpdatePost/updateDBoard")
public String updateDBoard(DebugBoardDTO dto) {
// 현재 날짜와 시간을 dto에 입력
Date now = new Date();
dto.setEdittedDate(now);
serv.updateDBoard(dto);
return "redirect:/viewDBoardContent/"+dto.getBoardNum();
}
//게시판 글 삭제 전 비밀번호 확인
@GetMapping("/checkDeletePost/{bNum}")
public ModelAndView checkDeletePost(@PathVariable("bNum") int boardNum) {
DebugBoardDTO dto = serv.viewDBoardContent(boardNum);
ModelAndView mav = new ModelAndView("member/Test/checkDeletePost");
mav.addObject("dto", dto);
return mav;
}
//게시판 글 삭제하기
@PostMapping("/deletePost")
public ModelAndView deletePost(String nickname, int boardNum) {
serv.deleteDBoard(boardNum);
return viewDBoardList();
}
}
컨트롤러는 사실상 갈아엎었다...
정렬은 마지막에 20분만에 호다닥 만들었다...
-추가 예정 기능-
부트스트랩을 이용한 글 목록 페이지네이션
게시판 + 세부 보기 꾸미기
세부 보기에서 이전글 / 다음글 보이기
게시판 입장 시 일정시간 유지되는 무작위 번호의 세션 생성 - 그 세션일 때 추천을 누르면 한동안 그 상태 저장
글 검색창