본문 바로가기
혼자서 개발새발

SpringMVC) 게시판에서 글 수정을 한 후 어떻게 전 페이지로 돌아갈까?

by 휴일이 2022. 11. 4.

 

 

 

게시판에서 글을 수정, 삭제 등등 할 때...

어떻게 하면 1페이지가 아니라(그냥 list URL이 아니라)

전에 보던 페이지로 돌아갈 수 있을까????

 

 

 

일단 URL이 변경되는 과정을 그려보았다

읽기 페이지의 from 페이지가 바로 우리가 가야할 페이지

 

 

 

가정1)

read(읽기)에서 request 받은 URI를 모델에 저장해서, 컨트롤러에서 모델에 담은 객체 이용

->모델에 담은 객체는 컨트롤러에서 사용이 안 되는 듯? 실패...

*정정함 이게 정답이었음^^^!!!!!!!!!

 

가정2)

read(읽기)에서 request 받은 URI을 String에 저장하여, 하드코딩...

->

이상하게 자꾸 지금 URI가 뜸...애초에 저런 형식을 원한 것도 아니었음^^;실패

 

 

그러던 중...

referer에 대해서 떠올렸다!!

 

이전 url을 알 수 있게 해주는 마법~

 

결과 == 성공적

 

아하!!

referer로 이전 url을 알아내고 그걸 저장한 뒤...

다시 referer에 저장했던 url을 가져와서 그걸 호출하면?!  가능할 거 같다!!!

(두둥)

 

 

 

시도해보자!

 

일단 referer 값을 jsp에 input type을 text로 저장해서! 진짜 값이 가져와지는지 확인해보자!

 

<input type="text" name="referer" value="${referer}">

 

결과는?

 

 

성공적으로 뜨는군^^!(짤렸지만 URI 다 나옴)

 

 

 

그러면 이 Referer에 fromURL 이라는 이름을 붙이고

모델에 저장하자~

 

 

    @GetMapping("/read")
    public String read(Integer bno,Integer page, Integer pageSize, Model m,HttpServletRequest request) {
        String fromURL = "";
        try {
            BoardDto boardDto = boardService.read(bno);
//          m.addAttribute("boardDto",boardDto); //아래 문장과 동일
            m.addAttribute(boardDto);
            m.addAttribute("page", page);
            m.addAttribute("pageSize", pageSize);
            //Referer:request받은 URL을 String fromURL에 삽입
            fromURL = request.getHeader("Referer");
            //모델에 저장!
            m.addAttribute("fromURL",fromURL);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return "board";
    }

 

 

그 다음엔?

 

수정 창으로 가게 해주는 메서드에

fromURL을 매개변수로 받은 뒤,

redirect를 해주면 됨!

 

 

    @PostMapping("/modify")
    public String modify(BoardDto boardDto,Model m, HttpSession session, RedirectAttributes rattr,String fromURL) {
        String writer = (String)session.getAttribute("id");
        boardDto.setWriter(writer);
        try {
            int rowCnt = boardService.modify(boardDto);
            if(rowCnt==0)
                throw new Exception("Modify failed");

            rattr.addFlashAttribute("msg","Modify OK");
            
            //fromURL null체크하기
            fromURL = fromURL==null || fromURL.equals("") ? "/board/list" : fromURL;
            return "redirect:"+fromURL;

        } catch (Exception e) {
            e.printStackTrace();
            m.addAttribute(boardDto);
            m.addAttribute("msg","Modify_ERR");
            return "board";
        }

    }

 

 

 

그럼 결과는??

(감격주의..)

 

 

 

9페이지에서

 

137번 게시물을 111로 수정해보았당~

 

 

 

수정을 완료해도 다시 수정 게시글이 있는 페이지로 돌아와진다!

 

같은 방법으로

삭제 후 전 페이지로 돌아가는 것도 간단히 수정했다>.<

 

 

 

spring mvc를 이해하고 있으면 정말 쉬운 문제였던 거 같은데

이해를 덜해서(사실 못해서)

진짜 싸맸다...ㅎㅎ

 

request.getHeader("Referer") 을 찾았는데도

모델에 넣고 그걸 다시 가져오는 작업을 이해를 못해서

몇시간동안 정말 힘들었고 이거저거 다 시도해보았다 ㅠㅠ

 

그래도 누구 도움 없이 혼자 풀어내서 정말 뿌듯하다!!

이래서 물어보지 말고 혼자 해결해보라고 하는 거구나...!!

 

 

728x90