[SPRING] 봄 RedirectAttributes : addFlashAttribute 대 addAttribute () ()
SPRING봄 RedirectAttributes : addFlashAttribute 대 addAttribute () ()
지금까지 우리 컨트롤러 요청 매핑 방법에 대한 이해는 RedirectAttributes 매개 변수를 지정하고 요청이 리디렉션 될 때 속성으로 채 웁니다.
예:
@RequestMapping(value="/hello", method=GET)
public String hello(RedirectAttributes redirAttr)
{
// should I use redirAttr.addAttribute() or redirAttr.addFlashAttribute() here ?
// ...
return "redirect:/somewhere";
}
리디렉션 속성은 리디렉션 대상 페이지에서 사용할 수 있습니다.
그러나 RedirectAttributes 클래스에는 두 가지 메소드가 있습니다.
잠시 동안 Spring 문서를 읽었지 만 조금 잃어 버렸습니다. 이 둘의 근본적인 차이점은 무엇이며, 어떤 것을 사용할 것인지 선택해야합니까?
해결법
-
==============================
1.차이점은 다음과 같습니다.
차이점은 다음과 같습니다.
따라서 addFlashAttribute ()의 이점은 flash 속성에 객체를 저장할 수 있다는 것입니다 (요청 매개 변수로 직렬화되지 않고 객체로 유지됨). 반면 addAttribute ()를 사용하면 add가 일반 요청 매개 변수로 변환되면 String이나 프리미티브와 같은 객체 유형으로 상당히 제한됩니다.
-
==============================
2.컨트롤러가 2 대 있다고 가정합니다. 한 컨트롤러에서 다른 컨트롤러로 리디렉션하는 경우 모델 객체의 값을 다른 컨트롤러에서 사용할 수 없습니다. 다른 컨트롤러. 따라서 모델 객체 값을 공유하려면 첫 번째 컨트롤러에서 말을해야합니다.
컨트롤러가 2 대 있다고 가정합니다. 한 컨트롤러에서 다른 컨트롤러로 리디렉션하는 경우 모델 객체의 값을 다른 컨트롤러에서 사용할 수 없습니다. 다른 컨트롤러. 따라서 모델 객체 값을 공유하려면 첫 번째 컨트롤러에서 말을해야합니다.
addFlashAttribute("modelkey", "modelvalue");
그런 다음 두 번째 컨트롤러의 모델에 위의 키 값 쌍이 포함됩니다.
두 번째 질문은? RedirectAttributes 클래스의 addAttribute와 addFlashAttribute의 차이점은 무엇입니까?
addAttribute는 모델 대신 requestparameters로 값을 전달하므로 addAttribute를 사용하여 일부를 추가하면 request.getParameter에서 해당 값에 액세스 할 수 있습니다
여기에 코드가 있습니다. 나는 무슨 일이 일어나고 있는지 알아 보곤했습니다.
@RequestMapping(value = "/rm1", method = RequestMethod.POST) public String rm1(Model model,RedirectAttributes rm) { System.out.println("Entered rm1 method "); rm.addFlashAttribute("modelkey", "modelvalue"); rm.addAttribute("nonflash", "nonflashvalue"); model.addAttribute("modelkey", "modelvalue"); return "redirect:/rm2.htm"; } @RequestMapping(value = "/rm2", method = RequestMethod.GET) public String rm2(Model model,HttpServletRequest request) { System.out.println("Entered rm2 method "); Map md = model.asMap(); for (Object modelKey : md.keySet()) { Object modelValue = md.get(modelKey); System.out.println(modelKey + " -- " + modelValue); } System.out.println("=== Request data ==="); java.util.Enumeration<String> reqEnum = request.getParameterNames(); while (reqEnum.hasMoreElements()) { String s = reqEnum.nextElement(); System.out.println(s); System.out.println("==" + request.getParameter(s)); } return "controller2output"; }
-
==============================
3.Javadoc 설명 : "FlashMap은 하나의 요청이 다른 URL에서 사용하도록 의도 된 속성을 저장할 수있는 방법을 제공합니다. 이것은 한 URL에서 다른 URL로 리디렉션 할 때 가장 일반적으로 필요합니다. 예를 들어 Post / Redirect / Get 패턴 FlashMap은 리디렉션 리디렉션 후에 즉시 사용할 수있게되어 즉시 제거됩니다. "
Javadoc 설명 : "FlashMap은 하나의 요청이 다른 URL에서 사용하도록 의도 된 속성을 저장할 수있는 방법을 제공합니다. 이것은 한 URL에서 다른 URL로 리디렉션 할 때 가장 일반적으로 필요합니다. 예를 들어 Post / Redirect / Get 패턴 FlashMap은 리디렉션 리디렉션 후에 즉시 사용할 수있게되어 즉시 제거됩니다. "
from https://stackoverflow.com/questions/14470111/spring-redirectattributes-addattribute-vs-addflashattribute by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @Mock, @MockBean 및 Mockito.mock ()의 차이점 (0) | 2018.12.13 |
---|---|
[SPRING] @Transactional 주석. 롤백하는 방법? (0) | 2018.12.13 |
[SPRING] Spring과 Jackson 전체 데이터 바인딩을 사용하는 REST (0) | 2018.12.13 |
[SPRING] Spring은 bean xml 설정 파일이 존재할 때 찾을 수 없다. (0) | 2018.12.13 |
[SPRING] @Scheduled (fixedDelay)를 Spring 3.0 표현 언어로 매개 변수화하는 방법은 무엇입니까? (0) | 2018.12.13 |