2019/03/24 - [웹/Spring] - RedirectAttributes의 addAttribute VS addFlashAttribute 차이점
이전 시간에 리다이렉트 시 URL에 파라미터로 전달할 때 두 가지 방식의 차이점을 봤습니다.
이번엔 프로젝트 진행하다가 불편한 점이 있었습니다.
바로 매번 파라미터를 유지하는 일이 번거롭고 힘들었다는 것입니다.
즉 컨트롤러에서 리다이렉트 시 여러 파라미터들을 일일이 다 addAttribute를 사용 하기 불편했다는 겁니다.
이를 해결하기 위한 방안으로 org.springframework.web.util.UriComponentsBuilder를 사용합니다.
이는 여러 개 파라미터들을 연결하여 하나의 URL 링크로 만들어서 반환해줍니다.
각 수정과 삭제할 때 페이지 번호, 개수, 검색 조건, 검색 키워드를 매번 넘겨줘야 하는 경우입니다.
우선 Criteria라는 검색조건 유지 클래스에서
package org.zerock.domain;
import org.springframework.web.util.UriComponentsBuilder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class Criteria {
private int pageNum; //페이지 번호
private int amount; //한페이지당 개수
private String type;
private String keyword;
public Criteria() {
this(1,10);
}
public Criteria(int pageNum,int amount) {
this.pageNum=pageNum;
this.amount=amount;
}
//검색 조건이 (T,W,C)로 구성되어 검색 조건을 배열로 만듬 Mybatis 동적 태그 활용
public String[] getTypeArr() {
return type == null ? new String[] {}: type.split("");
}
//UriCOmponentsBuilder 여러개의 파라미터를 연결해서 하나의 URL을 제공
public String getListLink() {
UriComponentsBuilder builder= UriComponentsBuilder.fromPath("")
.queryParam("pageNum", this.pageNum)
.queryParam("amount", this.getAmount())
.queryParam("type", this.getType())
.queryParam("keyword", this.getKeyword());
return builder.toUriString();
}
}
getListLink() 메서드를 만들어줍니다. 이는 UriComponentsBuilder를 이용한 여러 파라미터를 하나의 URL로 제공합니다.
UriComponentsBuilder 객체 생성 후 파라미터들을 만들어줍니다.
후 Uri문자열로 반환시켜줍니다.
이를 컨트롤러에서 사용하게 되면
아래와 같습니다.
@PostMapping("/modify")
public String modify(BoardVO board,@ModelAttribute("cri") Criteria cri, RedirectAttributes rttr) {
log.info("modify:"+board);
if(service.modify(board)) {
rttr.addFlashAttribute("result","success");
}
/*rttr.addAttribute("pageNum",cri.getPageNum());
rttr.addAttribute("amount",cri.getAmount());
rttr.addAttribute("type",cri.getType());
rttr.addAttribute("keyword",cri.getKeyword());*/
return "redirect:/board/list" + cri.getListLink();
}
@PostMapping("/remove")
public String remove(@RequestParam("bno") Long bno,@ModelAttribute("cri") Criteria cri,RedirectAttributes rttr) {
log.info("remove...."+bno);
if(service.remove(bno)) {
rttr.addFlashAttribute("result","success");
}
/*rttr.addAttribute("pageNum",cri.getPageNum());
rttr.addAttribute("amount",cri.getAmount());
rttr.addAttribute("type",cri.getType());
rttr.addAttribute("keyword",cri.getKeyword());*/
return "redirect:/board/list" + cri.getListLink();
}
주석처리 한 부분을 제거하고 return에 url을 아까 만들어두었떤 메서드를 이용하여 추가해줍니다.
이렇게 되면 일일이 addAttribute를 사용할 필요가 없어 편리합니다.
'웹 > Spring' 카테고리의 다른 글
REST AJAX 댓글 등록 처리 (2) | 2019.04.28 |
---|---|
REST 방식 (0) | 2019.03.31 |
스프링프레임워크 게시글 Github (0) | 2019.03.26 |
RedirectAttributes의 addAttribute VS addFlashAttribute 차이점 (2) | 2019.03.24 |
스프링 MVC 프레임워크 (0) | 2019.02.03 |