🌱SPRING

PRG(Post/Redirect/Get) νŒ¨ν„΄κ³Ό μ˜ˆμ‹œ

jhj.sharon 2023. 11. 8. 09:48
λ°˜μ‘ν˜•

| PRG νŒ¨ν„΄ 

μ›Ή κ°œλ°œμ—μ„œ μ‚¬μš©λ˜λŠ” νŒ¨ν„΄μœΌλ‘œ μ‚¬μš©μžκ°€ 폼을 μ œμΆœν•œ ν›„ μƒˆλ‘œ 고침을 λˆ„λ₯΄λ©΄ λ™μΌν•œ 데이터가 쀑볡 μ œμΆœλ˜λŠ” 문제λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€. 이럴 경우 동일 κ²Œμ‹œλ¬Όμ΄λ‚˜ 같은 주문이 λ°˜λ³΅λ˜μ–΄ 이루어 질 수 μžˆλ‹€. 이 νŒ¨ν„΄μ€ λ‹€μŒκ³Ό 같은 λ‹¨κ³„λ‘œ λ™μž‘ν•œλ‹€.

 

1. POST: μ‚¬μš©μžκ°€ μ›Ή 양식을 μž‘μ„±ν•˜κ³  μ œμΆœν•˜λ©΄, λ°μ΄ν„°λŠ” POST μš”μ²­μ„ 톡해 μ„œλ²„λ‘œ μ „μ†‘λœλ‹€.
2. Redirect: μ„œλ²„λŠ” 데이터λ₯Ό μ²˜λ¦¬ν•œ ν›„, μ‚¬μš©μžλ₯Ό λ‹€λ₯Έ νŽ˜μ΄μ§€λ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈ(예: 성곡 νŽ˜μ΄μ§€, 리슀트 νŽ˜μ΄μ§€ λ“±)ν•œλ‹€. μ΄λ•Œ λ¦¬λ‹€μ΄λ ‰νŠΈλŠ” GET μš”μ²­μ„ μ‚¬μš©ν•œλ‹€.
3. GET: λΈŒλΌμš°μ €λŠ” μ„œλ²„λ‘œλΆ€ν„° 받은 λ¦¬λ‹€μ΄λ ‰μ…˜ μ§€μ‹œμ— 따라 GET μš”μ²­μ„ ν•˜μ—¬ μƒˆ νŽ˜μ΄μ§€λ₯Ό λ‘œλ“œν•œλ‹€.

 

이 νŒ¨ν„΄μ˜ 핡심은 POST μš”μ²­μœΌλ‘œ 데이터λ₯Ό μ „μ†‘ν•œ 직후에 λΈŒλΌμš°μ €κ°€ μƒˆλ‘œκ³ μΉ¨μ„ ν•˜λ”λΌλ„ GET μš”μ²­λ§Œ λ‹€μ‹œ μˆ˜ν–‰λ˜κΈ° λ•Œλ¬Έμ—, 데이터가 μ€‘λ³΅μœΌλ‘œ μ„œλ²„μ— μ „μ†‘λ˜λŠ” 것을 λ°©μ§€ν•˜λ‹€λŠ” 것이닀.

 

이λ₯Ό 톡해 μ‚¬μš©μž κ²½ν—˜μ„ κ°œμ„ ν•˜κ³ , μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 신뒰도λ₯Ό 높일 수 μžˆλ‹€.

 

 

 

| PRG νŒ¨ν„΄ μ˜ˆμ‹œ - κ²Œμ‹œνŒ κΈ€ 등둝

μ•„λž˜ μ˜ˆμ‹œλŠ” κ΄€λ¦¬μž νŽ˜μ΄μ§€ μ‹ κ·œ 곡지사항 등둝기λŠ₯에 κ΄€ν•œ 것이닀.

 

1. μ‚¬μš©μžλŠ” μ•„λž˜ JSPμ—μ„œ κ²Œμ‹œκΈ€μ„ κ΄€λ ¨ ν•­λͺ©μ„ μž…λ ₯ν•˜κ³  λ“±λ‘ν•œλ‹€. 'μ €μž₯'λ²„νŠΌ ν΄λ¦­μ‹œ javascript ν•¨μˆ˜κ°€ μž‘λ™ν•˜λ©΄μ„œ μ»¨νŠΈλ‘€λŸ¬μ— POST μš”μ²­μ΄ μ „λ‹¬λœλ‹€.

 

<section id="container">
    <div class="contents">
        <h2>곡지사항 ${subTitle}</h2>

        <form name="insertNoticeBoardOne" method="post" enctype="multipart/form-data">
            <input type="hidden" name="noticeBoardSubType" value="${noticeBoardSubType}"/>
            <input type="hidden" id="editmode" name="editmode" value="${editmode}"/>
            
            <div class="inner">
                <div class="inputWrap">
                    <div class="gridWrap">
                        <!-- 제λͺ© μž…λ ₯ ν•„λ“œ -->
                        <div>
                            <span>제λͺ©</span>
                            <input type="text" id="bbsTtl" name="noticeTitle" maxlength="200"/>
                        </div>
                        <!-- μž‘μ„±μž 정보  -->
                        <div>
                            <span>μž‘μ„±μž</span>
                           
                        </div>
                        <!-- μž‘μ„±μΌ μž…λ ₯ ν•„λ“œ -->
                        <div>
                            <span>μž‘μ„±μΌ</span>
                            <div>
                                <input type="text" name="noticeFirstRegistPtm" readonly="readonly" class="no-border"/>
                            </div>
                        </div>
                        <!-- λ‚΄μš© μž…λ ₯ ν•„λ“œ -->
                        <div>
                            <span>λ‚΄μš©</span>
                            <textarea id="bbsCn" name="bbsCn" rows="10" cols="40" maxlength="4000"></textarea>
                        </div>
                        <!-- 파일 첨뢀 ν•„λ“œ -->
                        <div class="file-upload">
                            <span>νŒŒμΌμ²¨λΆ€</span>
                            <div id="file_upload_posbl" class="board_attach2">
                                <input name="file_1" id="egovComFileUploader" type="file" multiple />
                                <div id="egovComFileList"></div>
                            </div>
                        </div>
                    </div>
                </div>

                <!-- λ²„νŠΌ μ˜μ—­ -->
                <div class="btnArea">
                    <ul>
                        <li>
                            <button type="button" onClick="goList()">λͺ©λ‘</button>
                        </li>
                        <li>
                            <button type="button" onClick="editData()">μ €μž₯</button>
                        </li>
                    </ul>
                </div>
            </div>
        </form>
    </div>
</section>

 

2. POST : μ»¨νŠΈλ‘€λŸ¬μ—μ„œλŠ” μ›Ήμ—μ„œ μš”μ²­λ°›μ€ insertAdminNoticeBoardλ©”μ„œλ“œλŠ” κ²Œμ‹œκΈ€ 등둝 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν•œλ‹€. μ„œλ²„μ— μ €μž₯이 λλ‚œ λ’€ λͺ©λ‘ νŽ˜μ΄μ§€λ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈν•œλ‹€.

 

3. GET: λΈŒλΌμš°μ €λŠ” μ„œλ²„λ‘œλΆ€ν„° 받은 λ¦¬λ‹€μ΄λ ‰μ…˜ μ§€μ‹œμ— 따라 GET μš”μ²­μ„ ν•˜μ—¬ κ²Œμ‹œκΈ€ λͺ©λ‘ νŽ˜μ΄μ§€λ₯Ό λ‘œλ“œν•œλ‹€.

 

    @PostMapping(value = "/insertAdminNoticeBoard.do")
    public String insertAdminNoticeBoard(final MultipartHttpServletRequest multiRequest, NoticeBoardVO boardVO, ModelMap model) throws Exception {
        List<FileVO> result = null;
        String atchFileId = "";
        boardVO.setNoticeBoardType(4);

        final Map<String, MultipartFile> files = multiRequest.getFileMap();
        if (!files.isEmpty()) {
            result = fileUtil.parseFileInf(files, "BBS_", 0, "", "");
            atchFileId = fileMngService.insertFileInfs(result);
            boardVO.setAtchFileId(atchFileId);
        }
     
        announcementAdminSerivce.insertBoard(boardVO);

        model.addAttribute("editmode", "I");
        model.addAttribute("boardVO", boardVO);

        return "redirect:admin/selectAminNoticeBoardList.admin";
    }

    @GetMapping({"/Announcement.do","/Board.do", "/QnA.do"})
    public String selectAminNoticeBoardList(@ModelAttribute("searchVO") NoticeBoardVO searchVO,  HttpServletRequest request, ModelMap model){



        /* pageing setting */
        PaginationInfo paginationInfo = new PaginationInfo();
        paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
        paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
        paginationInfo.setPageSize(searchVO.getPageSize());

        searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
        searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
        searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());


        List<NoticeBoardVO> boardList = announcementAdminSerivce.selectBoardList(searchVO);

        int totCnt = announcementAdminSerivce.selectBoardListTotCnt(searchVO);
        paginationInfo.setTotalRecordCount(totCnt);
        model.addAttribute("boardList", boardList);

        model.addAttribute("noticeBoardSubType", searchVO.getNoticeBoardSubType());

        model.addAttribute("paginationInfo", paginationInfo);



        return "admin/AdminNoticeBoardList.admin";
    }
λ°˜μ‘ν˜•