code

스프링 리다이렉트 속성: addAttribute() vs addFlashAttribute()

starcafe 2023. 2. 16. 21:55
반응형

스프링 리다이렉트 속성: 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 ★★★★★★★★★★★★★★★★★」addFlashAttributeRedirectAttributes 표시

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

반응형