나의 수업일지

인천 일보 아카데미 51일차 -1- 비로그인 게시판 만들어보기

2023. 5. 7. 20:42
  • url 조건

 

 

  • MySQL 테이블

 

 

  • DTO

 

 

  • 시작페이지 Index

 

header - nav - section - footer로 나눴고 nav에는 글작성 , 글목록으로 이동할 수 있게 링크가 걸려있음

 

 

<nav>
    <ul>
        <li style="display: inline-block;list-style-type: none">
        <a href="/board/save" style="text-decoration: none">글작성</a></li>
        
        <li style="display: inline-block;list-style-type: none">
        <a href="/board/" style="text-decoration: none">글목록</a></li>
    </ul>
</nav>

 

 

  • 글 작성 페이지

 

 

<section>
    <div>
        <h2 style="text-align: center;">나는야 세이브</h2>
        <form action="/board/save" method="post">
            <table>
                <tr>
                    <th><label for="boardWriter">작성자:</label>
                        <input type="text" id="boardWriter" name="boardWriter"></th>
                    <th><label for="boardPass">글비밀번호:</label>
                        <input type="text" id="boardPass" name="boardPass"></th>
                    <th><label for="boardTitle">글제목</label>
                        <input type="text" id="boardTitle" name="boardTitle"></th>
                <tr>
                    <th colspan="6"><label for="boardContents">내용</label></th>
                </tr>
                <tr>
                    <td colspan="6"><textarea id="boardContents" name="boardContents" COLS="104" ROWS="40"></textarea>
                    </td>
                </tr>
                <tr>
                    <th colspan="6">
                        <input type="submit" style="display: inline" value="등록">
                        <input type="button" style="display: inline" value="취소" onclick="goindex()">
                    </th>
                </tr>
            </table>
        </form>
    </div>
</section>

내용을 작성할 공간은 textarea로 만들어 주었음 clos rows를 이용하여 가로 세로 크기도 정해줌

이렇게 입력된 게시글 내용은 post로 controller의 /board/save에 넘어가게된다

 

 

  • Controller
@Controller
@RequestMapping("/board") // 공통 주소값으로 설정
public class BoardController {
    @Autowired
    private BoardService boardService;

    @GetMapping("/save") // /board/save
    public String BoardSave(){
        return "boardPages/boardSave";
    }

    @PostMapping("/save") // /board/save
    public String BoardSave(@ModelAttribute BoardDTO boardDTO){
        boardService.BoardSave(boardDTO);
        return "redirect:/board/";
    }

Controller에서 RequestMapping을 이용하여 /board를 공통 주소값으로 설정했다

이렇게 공통주소값이 설정된다면 /board는 자동으로 입력되기 때문에 생략 가능하다

이렇게 Controller - Service - Repository - Mapper를 통하여 서버에 저장된다

 

 

  • 글 목록 페이지

 

 

        <table>
            <tr>
                <th>글번호</th>
                <th>제목</th>
                <th>작성자</th>
                <th>작성시간</th>
                <th>조회수</th>
            </tr>
            <c:forEach items="${bList}" var="s">
                <tr>
                    <td style="border: 1px solid black;text-align: center;padding: 5px">
                        <a style="text-decoration: none;color: black" href="/board?id=${s.id}">${s.id}</a></td>
                    <td style="border: 1px solid black;text-align: center;padding: 5px">
                        <a style="text-decoration: none;color: black" href="/board?id=${s.id}">${s.boardTitle}</a></td>
                    <td style="border: 1px solid black;text-align: center;padding: 5px">
                        <a style="text-decoration: none;color: black" href="/board?id=${s.id}">${s.boardWriter}</a></td>
                    <td style="border: 1px solid black;text-align: center;padding: 5px">
                        <a style="text-decoration: none;color: black" href="/board?id=${s.id}">
                            <fmt:formatDate value="${s.boardCreateDate}" pattern="yyyy-MM-dd HH:mm"></fmt:formatDate>
                        </a></td>
                    <td style="border: 1px solid black;text-align: center;padding: 5px">
                        <a STYLE="text-decoration: none;color: black">${s.boardHits}</a></td>
                </tr>
            </c:forEach>
            </table>

롬북의 c태그를 사용하여 forEach문을 통해 Model에 담긴 값을 뿌려준모습

List는 SAVE와 반대로 서버에서 값을 가져온다

 

 

  • Repository
    public List<BoardDTO> BoardList() {
        return sql.selectList("Board.List");
    }

Mapper를 통해 DB에서 가져온 List 정보를 jsp까지 넘겨준다

 

 

  • 글 상세 페이지

List에서 글을 누르게 되면 내용을 볼 수 있고

수정 삭제가 가능하다 , 수정과 삭제는 게시글 작성시 받은 비밀번호가 필요하다

 

 

    <table>
        <tr>
            <th colspan="6">제목</th>
        </tr>
        <tr>
            <td colspan="6"><textarea cols="104" name="boardTitle" readonly>${boardDTO.boardTitle}</textarea></td>
        </tr>
        <tr>
            <th>글번호</th>
            <th>작성자</th>
            <th>작성시간</th>
            <th>조회수</th>
        </tr>
        <tr>
            <th>${boardDTO.id}</th>
            <th>${boardDTO.boardWriter}</th>
            <th>
                <fmt:formatDate value="${boardDTO.boardCreateDate}" pattern="yyyy-MM-dd HH:mm"></fmt:formatDate>
            </th>
<%--            <th>${boardDTO.boardCreateDate}</th>--%>
            <th>${boardDTO.boardHits}</th>
        </tr>
        <tr>
            <td colspan="6"><textarea id="boardContents" name="boardContents"
                                      COLS="104" ROWS="38" readonly>${boardDTO.boardContents}</textarea></td>
        </tr>
        <tr>
            <th colspan="6">
                <input type="button" value="수정" onclick="goUpdate(${boardDTO.id})">
                <input type="button" value="삭제" onclick="goDelete(${boardDTO.id})">
                <input type="button" value="뒤로" onclick="goList()">
            </th>
        </tr>
    </table>

 

 

  • Controller
    @GetMapping
    public String boardDetail(@RequestParam("id") Long id , Model model){
        boardService.updateHits(id);
        BoardDTO boardDTO = boardService.boardDetail(id);
        model.addAttribute("boardDTO",boardDTO);
        return "boardPages/boardDetail";
    }

상세 페이지의 컨트롤러에서는 조회수 증가까지 함께 해준다

조회수를 1올리고 db에서 파리미터로 받은 id값의 정보를 찾아 화면에 출력한다

 

 

  • 상세 페이지 - 수정 / 삭제

수정

<script>
    const updateForm = document.getElementById('updateForm');
    updateForm.addEventListener("submit",function (e){
    e.preventDefault();
    let promptResult = prompt("기존 비밀번호 확인", "입력바랍니다");
    if('${boardDTO.boardPass}' != promptResult){
        alert("비밀번호가 틀립니다");
    }else{
        alert("수정 완료!");
        updateForm.submit();
    }
    })
</script>

updateform에서 서브밋 이벤트가 실행되는 경우 이를 막고 prompt를 실행합니다

이후 prompt에서 받은 값과 기존 비밀번호가 맞는 경우 서브밋을하고 맞지 않는다면 서브밋을 하지 않습니다

 

 

 

삭제

<script>
    const deleteFrom = document.getElementById('deleteForm');
    const passwordResult = document.getElementById('passwordResult');
    deleteFrom.addEventListener("submit",function (e){
        e.preventDefault();
        if(passwordResult.value != ${boardDTO.boardPass}){
            alert("비밀번호가 틀립니다");
        }else{
            alert("삭제 완료!")
            deleteFrom.submit();
        }
    })
</script>

서브밋이 발생되엇을때 preventDefault를 사용하여 이벤트를 막아주고

조건문을 실행합니다 입력받은 값이 기존 비밀번호와 같다면 서브밋을하고

맞지 않다면 삭제를 진행하지 않습니다

'나의 수업일지' 카테고리의 다른 글

인천 일보 아카데미 53일차 - 비로그인 게시판 - 댓글 기능  (0) 2023.05.08
인천 일보 아카데미 52일차 -1- 이미지 업로드 / detail에 이미지 보여주기  (0) 2023.05.07
인천 일보 아카데미 50일차 -2- Email - 중복체크 (개인저장 내용X)  (0) 2023.05.02
인천 일보 아카데미 50일차 -1- ajax - json 주고 받기 / ajax - 리턴값 body에 표로 넣기 (@RequestBody) / ajax - ResponseEntity 알아보기  (0) 2023.05.02
인천 일보 아카데미 49일차 -2- ajax - 알아보기 / ajax - 사용해보기 / 동기식?,비동기식? / ajax - 객체리턴 / ajax - list리턴 / ajax - for문  (0) 2023.05.01
'나의 수업일지' 카테고리의 다른 글
  • 인천 일보 아카데미 53일차 - 비로그인 게시판 - 댓글 기능
  • 인천 일보 아카데미 52일차 -1- 이미지 업로드 / detail에 이미지 보여주기
  • 인천 일보 아카데미 50일차 -2- Email - 중복체크 (개인저장 내용X)
  • 인천 일보 아카데미 50일차 -1- ajax - json 주고 받기 / ajax - 리턴값 body에 표로 넣기 (@RequestBody) / ajax - ResponseEntity 알아보기
GUPING
GUPING
안녕하세요 개발자를 꿈꾸는 GUPING 입니다
GUPING
개발자를 꿈꾸는 GUPING
GUPING
전체
오늘
어제
  • 분류 전체보기 (89)
    • 나의 수업일지 (88)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 네이버
  • 답변 채택
  • 다중프리뷰
  • realative
  • Ajax
  • 수정
  • PAGE
  • 버튼 이벤트 함수 변경
  • 페이징Controller
  • 여러사진프리뷰
  • 틀만들기
  • 클래스 이름 변경
  • 삭제
  • naver
  • 로그인 경고문
  • 파일이름가져오기
  • 파일 이름 가져오기
  • 개힘드렁
  • 검색결과페이징
  • 버튼 이벤트 변경
  • Paging
  • 업로드파일이름출력
  • 로그인게시판
  • 검색
  • 지식인
  • 페이징
  • 파일이름(다중)
  • pagingAjax
  • 로그인form
  • 버튼2가지이벤트

최근 댓글

최근 글

hELLO · Designed By 정상우.
GUPING
인천 일보 아카데미 51일차 -1- 비로그인 게시판 만들어보기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.