스프링 리다이렉트 속성: addAttribute() vs addFlashAttribute()
지금까지의 인식으로는 컨트롤러 요구 매핑 방식에 대해 RedirectAttributes 파라미터를 지정하여 요구가 리다이렉트 되었을 때의 Atribute를 설정할 수 있습니다.
예:
@RequestMapping(value="/hello", method=GET)
public String hello(RedirectAttributes redirAttr)
{
// should I use redirAttr.addAttribute() or redirAttr.addFlashAttribute() here ?
// ...
return "redirect:/somewhere";
}
리다이렉트 속성은 리다이렉트 대상 페이지에서 사용할 수 있습니다.
단, Redirect Attributes 클래스에는 다음 두 가지 메서드가 있습니다.
봄 문서를 읽은 지 꽤 됐는데 좀 이해가 안 가네요.그 둘의 근본적인 차이점은 무엇이며, 어떤 것을 사용할지 어떻게 선택해야 합니까?
차이점은 다음과 같습니다.
addFlashAttribute()
실제로 플래시 맵에 Atribute를 저장합니다(이 Atribute는 사용자 내부에서 관리됩니다).session
다음 리다이렉트 요구가 충족되면 삭제한다.)addAttribute()
는 기본적으로 Atribute에서 요구 파라미터를 작성하고 요구 파라미터를 사용하여 원하는 페이지로 리다이렉트합니다.
이 때문에,addFlashAttribute()
플래시 속성의 거의 모든 오브젝트를 저장할 수 있습니다(요청 파라미터에 시리얼화되지 않고 오브젝트로 유지되기 때문에).addAttribute()
.String
또는 원형을 선택합니다.
컨트롤러가 2개 있다고 가정합니다.한 컨트롤러에서 다른 컨트롤러로 리디렉션하면 모델 개체의 값을 다른 컨트롤러에서 사용할 수 없습니다.따라서 모델 객체 값을 공유하려면 첫 번째 컨트롤러에서 다음과 같이 말해야 합니다.
addFlashAttribute("modelkey", "modelvalue");
다음으로 두 번째 컨트롤러 모델에는 위의 키 값 쌍이 포함되어 있습니다.
번째 질문 아, 아, 아, 아, 아, 아, 아, 아, 두 번째 질문?「 」의 입니까?addAttribute
★★★★★★★★★★★★★★★★★」addFlashAttribute
RedirectAttributes
표시
addAttribute
로 값을 "request parameter"를 사용하여 하면 " parameter"가 됩니다.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";
}
Javadoc 설명: "FlashMap을 사용하면 어떤 요청에 다른 요청에 사용할 속성을 저장할 수 있습니다.이것은 한 URL에서 다른 URL로 리디렉션할 때 가장 일반적으로 필요합니다(예: Post/Redirect/Get 패턴).FlashMap은 리다이렉트 전에 저장되며(일반적으로 세션에서), 리다이렉트 후에 사용할 수 있게 되어 즉시 삭제됩니다."
언급URL : https://stackoverflow.com/questions/14470111/spring-redirectattributes-addattribute-vs-addflashattribute
'code' 카테고리의 다른 글
연동 테스트용 스프링부트 인증 (0) | 2023.02.16 |
---|---|
Wordpress Rest API를 사용하여 현재 로그인 사용자를 얻는 방법은 무엇입니까? (0) | 2023.02.16 |
카테고리를 포스트 워드프레스에 관련짓는 방법 (0) | 2023.02.16 |
jquery Ajax 호출 - 데이터 매개 변수가 MVC 컨트롤러 작업으로 전달되지 않습니다. (0) | 2023.02.16 |
JSON 필드 이름을 다른 개체 필드 이름에 매핑하려면 어떻게 해야 합니까? (0) | 2023.02.12 |