Spring MVC에서 ModelAndView의 Model은 무엇입니까?


86

이 기본 기능을 가지고

protected ModelAndView handleRequestInternal(...) {
    ...
    return new ModelAndView("welcomePage", "WelcomeMessage", message);
}

이것이 modelandView를 반환한다는 것을 알고 있습니다. 나는 그것이 welcomePage내 뷰 welcomepage.jsp이름이라는 것을 알고 있으므로 같은 것을 호출 할 것임을 의미합니다 .

그러나 나는 모델 부분이 무엇인지 혼동합니다. 무엇 WelcomeMessagemessage그 시나리오에서 어떻게 모델 작업은?

답변:


114

모델은 뷰에 표시 할 정보를 보유하는 자리 표시자를 제공합니다. 위의 예에있는 문자열 일 수도 있고 여러 속성을 포함하는 객체 일 수도 있습니다.

예 1

당신이 가지고 있다면...

return new ModelAndView("welcomePage","WelcomeMessage","Welcome!");

... 그런 다음 jsp에서 메시지를 표시하려면 다음을 수행하십시오.

Hello Stranger! ${WelcomeMessage} // displays Hello Stranger! Welcome!

예 2

당신이 가지고 있다면...

MyBean bean = new MyBean();
bean.setName("Mike!");
bean.setMessage("Meow!");

return new ModelAndView("welcomePage","model",bean);

... 그런 다음 jsp에서 다음을 수행 할 수 있습니다.

Hello ${model.name}! {model.message} // displays Hello Mike! Meow!

4
즉 WelcomeMessage는 jsp에서 사용할 변수 이름이고 "Welcome!" . 두 번째 인수가 취할 수있는 다른 사항을 어디에서 찾을 수 있는지 알려주시겠습니까? 이제 변수 이름, 모델 이름이 필요하다는 것을 이해합니다. 다른 어떤 것도 취할 수 있습니까

4
두 번째 인수는 모델의 논리적 이름을 나타냅니다. 원하는 이름으로 부를 수 있지만 JSP에서 모델을 참조 할 때 사용할 이름입니다. 첫 번째 예에서는, WelcomeMessage두 번째 예에서는라고했습니다 model. 이해하기 쉬운 이름을 사용하십시오. 세 번째 인수는 정보를 보유합니다. 간단한 문자열, POJO 또는지도 일 수 있습니다. 기본적으로 뷰에 표시하려는 유용한 정보입니다.
limc

24
new ModelAndView("welcomePage", "WelcomeMessage", message);

~의 속기

ModelAndView mav = new ModelAndView();
mav.setViewName("welcomePage");
mav.addObject("WelcomeMessage", message);

위의 코드를 보면보기 이름이 "welcomePage"임을 알 수 있습니다. 귀하의 ViewResolver(보통 설정은 .../WEB-INF/spring-servlet.xml)는보기에이 변환합니다. 코드의 마지막 줄은 모델 ( addObject("WelcomeMessage", message)) 의 속성을 설정합니다 . 그것이 모델이 작동하는 곳입니다.


16

이것은 모두 생성자 에 대한 javadoc에 의해 설명됩니다 . 하나의 속성 / 값 쌍으로 모델을 채우는 편의 생성자입니다.

그래서 ...

   new ModelAndView(view, name, value);

다음과 같습니다.

   Map model = ...
   model.put(name, value);
   new ModelAndView(view, model);

14

이 경우 메서드에는 ModelandView 라는 3 개의 매개 변수가 있습니다.
이 질문에 따르면 첫 번째 매개 변수는 쉽게 이해됩니다. 클라이언트에 표시 될 보기 를 나타냅니다 .
다른 두 매개 변수는 포인터홀더 와 같습니다 .
따라서 다음과 같이 요약 할 수 있습니다.

ModelAndView ( 뷰, 포인터, 홀더 );

포인터 는 홀더 의 정보를 가리 킵니다.

컨트롤러 가이 정보로 를 바인딩 하면 해당 프로세스 에서 JSP 페이지 의 포인터 를 사용하여 홀더 에 저장된 정보에 액세스하여 해당 정보를 클라이언트에 표시 할 수 있습니다. 다음은 존경받는 과정을 시각적으로 묘사 한 것입니다.

return new ModelAndView("welcomePage", "WelcomeMessage", message);

여기에 이미지 설명 입력


2

Well, WelcomeMessage는 메시지의 변수 이름 일뿐입니다 (데이터가있는 실제 모델). 기본적으로 여기에서 welcomePage를 사용하여 모델을 바인딩합니다. 모델 (메시지)은 welcomePage.jsp에서 WelcomeMessage로 사용할 수 있습니다. 다음은 더 간단한 예입니다.

ModelAndView("hello","myVar", "Hello World!");

이 경우 내 모델은 간단한 문자열입니다 (애플리케이션에서는 DB 또는 기타 소스에 대해 가져온 데이터가있는 POJO입니다.). myVar에 할당하고 있으며 내 뷰는 hello.jsp입니다. 이제 myVar는 hello.jsp에서 사용할 수 있으며 디스플레이에 사용할 수 있습니다.

보기에서 다음을 통해 데이터에 액세스 할 수 있습니다.

${myVar}

마찬가지로 WelcomeMessage 변수를 통해 모델에 액세스 할 수 있습니다.


0

ModelAndView : 이름 자체가 Model 및 View 데이터를 포함하는 데이터 구조임을 설명합니다.

Map() model=new HashMap(); 
model.put("key.name", "key.value");
new ModelAndView("view.name", model);

// or as follows

ModelAndView mav = new ModelAndView();
mav.setViewName("view.name");
mav.addObject("key.name", "key.value");

모델에 단일 값만 포함 된 경우 다음과 같이 작성할 수 있습니다.

ModelAndView("view.name","key.name", "key.value");

0
@RequestMapping(value="/register",method=RequestMethod.POST)
   public ModelAndView postRegisterPage(HttpServletRequest request,HttpServletResponse response,
           @ModelAttribute("bean")RegisterModel bean)
   {
       RegisterService service = new RegisterService();
       boolean b = service.saveUser(bean);

       if(b)
       {
           return new ModelAndView("registerPage","errorMessage","Registered Successfully!");
       }
       else
       {
           return new ModelAndView("registerPage","errorMessage","ERROR!!");
       }
   }



/*  "registerPage" is the .jsp page -> which will viewed.
/* "errorMessage" is the variable that could be displayed in page using -> **${errorMessage}**
/* "Registered Successfully!" or "ERROR!!" is the message will be printed based on **if-else condition**
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.