복붙노트

[SPRING] 요청 사이에 스프링이있는 상태 유지

SPRING

요청 사이에 스프링이있는 상태 유지

나는 이것이 초보자 용 질문이라면 미안하다.하지만 매뉴얼이 분명하지 않다.

제 질문은 : 봄에 요청 사이에 어떻게 상태를 공유 할 수 있습니까? ModelMap을 사용하여 컨트롤러에서보기로 데이터를 보낼 수는 있지만 ModelMap의 데이터는 뷰에서 다음 컨트롤러로 다시 보내지지 않습니다. 봄에 어떻게 할 수 있습니까?

아래는 내 소스 코드의 일부입니다. 두 번째 컨트롤러에서 modelMap은 첫 번째 컨트롤러의 modelMap에 저장된 데이터를 포함하지 않습니다. 봄에 컨트롤러간에 상태를 어떻게 유지해야합니까?

도와 줘서 고마워.

@RequestMapping(value = "find/something", method = RequestMethod.GET)
public String foo(@RequestParam("parent") Parent parent, ModelMap modelMap) {    
...
    modelMap.addAttribute("question_index", 42);
    modelMap.addAttribute("something", new Something());
    modelMap.addAttribute("data", new Data());
    return "some/view";
}

<form:form action="bla" method="POST"  modelAttribute="data">
...// using Something() and 42
</form:form>

@RequestMapping(value = "bla", method = RequestMethod.POST)    
public String bla(@ModelAttribute("data") Data data, BindingResult result, ModelMap modelMap) {
System.out.println(modelMap); // doesn't contain question_index, or something
}

해결법

  1. ==============================

    1.modelMap을 HttpSession에 넣거나 (더 큰 응용 프로그램에 적합) Spring 웹 플로우를 사용하여 대화를 할 수 있습니다.

    modelMap을 HttpSession에 넣거나 (더 큰 응용 프로그램에 적합) Spring 웹 플로우를 사용하여 대화를 할 수 있습니다.

  2. ==============================

    2.Spring에서 이것을 수행하는 가장 깨끗한 방법은 session-scoped spring bean이다. 빈의 인스턴스는 세션에 비공개이며, 각 세션이 시작될 때 Spring에 의해 인스턴스화되고 관리됩니다. 이 빈은 대화 상태를 유지할 수 있습니다.

    Spring에서 이것을 수행하는 가장 깨끗한 방법은 session-scoped spring bean이다. 빈의 인스턴스는 세션에 비공개이며, 각 세션이 시작될 때 Spring에 의해 인스턴스화되고 관리됩니다. 이 빈은 대화 상태를 유지할 수 있습니다.

    이 메커니즘은 표준 HttpSession 속성을 사용하지만 코드가 HttpSession을 직접 처리 할 필요가 없다는 것을 의미하므로 전반적으로 더 깨끗합니다.

    Spring 문서의 설정과 사용법은 관련 문서 (여기)를 참조하십시오.

  3. ==============================

    3.귀하의 제안에 감사드립니다. ModelMap의 키를 세션 속성으로 태그 지정하여 해결했습니다.

    귀하의 제안에 감사드립니다. ModelMap의 키를 세션 속성으로 태그 지정하여 해결했습니다.

    @SessionAttributes( { "question_index", "something" })  
    @Controller  
    public class MyController{  
    ...  
    }  
    
  4. ==============================

    4.일반적으로 (그리고 Spring이없는) 그러한 데이터는 서블릿 세션으로 들어갈 것이다.

    일반적으로 (그리고 Spring이없는) 그러한 데이터는 서블릿 세션으로 들어갈 것이다.

  5. ==============================

    5.너 스스로해라.

    너 스스로해라.

    <form:form action="bla" method="POST"  modelAttribute="data">
        <input type="hidden" name="data" value="${data}"/>
    </form:form>
    
  6. from https://stackoverflow.com/questions/1856440/maintain-state-with-spring-between-requests by cc-by-sa and MIT license