[Spring] Model 이해

HanSamDul·2022년 10월 5일
0

Model 객체는 컨트롤러(Controller)에서 데이터를 생성해 이를 JSP, 즉 View에 전달하는 역할을 합니다. HashMap 형태를 갖고 있고, 키(key)와, 밸류(value) 값을 저장합니다.  Servlet의 request.setAttribute()과 비슷한 역할을 한다고 알려져 있습니다.

컨트롤러 클래스 제작 순서
1. @Controller를 이용해서 클래스를 생성한다.
2. @RequestMapping을 이용해, view의 요청 경로 지정한다.
3. 요청 처리 메소드(로직) 구현한다.
4. 뷰 이름 리턴한다.

@Controller
public class LoginController {

	@RequestMapping("/login")
	public String login(HttpServletRequest request, ModelMap model, HttpSession session) throws Exception{
		model.addAttribute("company", commonService.selectCompanyList());
        return "login";
}

  • 2번째에 "ModelMap model"이 선언. 메서드에 매개변수를 ModelMap 타입의 model 변수를 선언함으로 사용이 가능. 그리고 "addAttribute"를 통해 View로 데이터를 전달할 수 있다. 
addAttribute?
- Model에 데이터를 담을 때 addAttribute( ) 메소드를 사용. Model 객체를 파라미터로 받아서 데이터를 뷰로 넘길 수 있다. 
model.addAttribute("변수이름", "변수에 넣을 데이터값");

▲ Controller
${변수이름}
- 뷰(.jsp 파일)에서는 ${}를 이용해서 값을 가져온다.

▲ View(jsp)

<div class="wrap-input100 login-box">
       <select name="p_companycd" id="p_companycd" style="width:100%; height:100%; border:none; padding-left:1.625rem; background-color:transparent; color:white;">
	   <c:forEach var="result" items="${company}">
			 <option value="${result.companycd}">${result.descr}</option>
	   </c:forEach>
       </select>
 </div>
  {company=[
	  {companycd=00, descr=벨로그산업(주)}, 
	  {companycd=01, descr=(주)테스트공업}, 
	  {companycd=02, descr=(주)테스트카인텍}, 
	  {companycd=04, descr=TEST1 USA}, 
	  {companycd=05, descr=TEST2 USA}, 
	  {companycd=06, descr=테스트1산업(주)}, 
	  {companycd=07, descr=테스트2산업(주)}, 
	]}

Model, ModelMap Vs ModelAndView 차이점

  • 데이터만 저장한다 vs 데이터와 이동하고자 하는 View Page를 같이 저장한다
Model, ModelMap 공통점
model.addAttribute("변수명");
modelMap.addAttribute("변수명");
  • 둘 다 addAttribute를 사용.
  • Model or ModelMap에 데이터만 저장 후 View에서 사용목적
model.put(“a”,a) 
model.addAttribute(“a”,a) 
  • 차이점은? addAttribute는 “a”가 null이면 안됨
Model, ModelMap 차이점
  • Model - 인터페이스(비구현)
  • ModelMap - 클래스(구현체)

ModelAndView

  • addObject를 통해 데이터를 저장
  • setViewName을 통해 이동하고자 하는 View를 저장
  • 메소드 안에서 ModelAndView mv = new ModelAndView(); 
  • return type ModelAndView 
  • 참고자료
@RequestMapping(value = "/test.do")
public ModelAndView test(HttpServletRequest request, ModelAndView mv){
        
    String modelAndViewStr = "ModelAndView Test";
    
    mv.addObject("modelAndViewVar", modelAndViewStr);
    mv.setViewName("temp/test");
        
    return mv;
}
<body>
    ModelAndView 저장한 값 : <input type="text" value="${modelAndViewVar }"/><br/>
</body>

출처

0개의 댓글