[SpringBoot] String값 리턴 > ModelView 값 리턴 변경 , a태그 이전페이지 돌아가기

Glen(OH TaekJoo)·2023년 7월 13일
0

Study

목록 보기
25/53

기존코드와 변경한 코드

@PreAuthorize("isAuthenticated()")
    @GetMapping("/article/modify/{id}")
    public String articleModify(QuestionForm articleForm, @PathVariable("id") Integer id, Principal principal) {
        Question article = this.questionService.getQuestion(id);
        if (!article.getAuthor().getUsername().equals(principal.getName())) {
            throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "수정권한이 없습니다.");
        }
        articleForm.setSubject(article.getSubject());
        articleForm.setContent(article.getContent());
        return "question_form";
    }

기존의 게시글 수정 코드이다.

기존 게시글의 작성자회원정보와 접속자의 정보가 다를 경우 'ResponseStatusException' 을 통해 400에러가 나타나며 에러안에 해당 에러메세지가 없다는 문구가 나타났다.

400에러 대신 에러템플릿으로 새창을 띄워 에러메세지를 표현하기 위해 아래와 같이 코드를 수정하였다.

@PreAuthorize("isAuthenticated()")
@GetMapping("/article/modify/{id}")
public ModelAndView articleModify(QuestionForm articleForm, @PathVariable("id") Integer id, Principal principal) {
    Question article = this.questionService.getQuestion(id);
    if (!article.getAuthor().getUsername().equals(principal.getName())) {
        ModelMap model = new ModelMap();
        model.addAttribute("errorMessage", "수정권한이 없습니다.");
        return new ModelAndView("error_page", model);
    }
    articleForm.setSubject(article.getSubject());
    articleForm.setContent(article.getContent());
    return new ModelAndView("question_form", "questionForm", articleForm);
}

보여줄 에러템플릿에 에러메세지를 모델값으로 저장 후 템플릿을 불러오기 위해서 메서드를 String 값 리턴이 아닌 ModelAndView 값을 리턴 하도록 수정하였다.

또한 해당 작성자와 접속자 정보가 다를경우 'ResponseStatusException' 로 400에러를 띄우는 것이 아닌 에러메시지를 모델로 저장한 템플릿으로 불러오기 위해 위와같이 수정하였다.

반환값이 ModelAndView 임으로 맨아래에도 ModelAndView 값으로 작성폼을 리턴하도록 수정을 해주었다.

Model 과 ModelAndView 의 차이

ModelAndView 는 Model 과 View 를 동시에 반환할 수 있다.

작성한 에러 템플릿

해당 템플릿으로 저장한 오류메시지가 정상적으로 표기된다.
오류창이 뜰경우 이전페이지로 돌아가기 위해 a태그를 사용하여 이전페이지로 돌아갈 수 있도록
버튼을 만들었다.

a태그를 사용하여 이전페이지로 돌아가는 방법

<a href="javascript:history.go(-1)">이전 페이지로 돌아가기</a>

href 에 스크립트 히스토리-1 를 사용하여 바로 전 페이지로 돌아갈 수 있다.

profile
병아리 개발자 의 우당탕탕 성장기

0개의 댓글