[ 테스트 계졍으로 로그인 ] 정보올림피아드,코테 : 환경이 어떠한지 전날 미리 한번 들어와서 보아라; 그때 테스트 계정을 활용하는 경우
=> Command 객체를 별도의 설정없이 바로 view에서 사용해 보기
request에서 셋해서 받아오는애를 뷰까지 이용해 보자
header태그에서 value로 미리 값을 받고 싶다는것. value="${컨트롤러로 부터 넘어오는 기본값}"
테스트계정을 메인 화면에서 바로 볼 수 있게 하고 싶다 ==>> controller로 부터 값을 받아와야 합니다
MainController (메인페이지로 가게 하는 친구) 여기서 작업을 해야 합니다
뭔가를 넘겨주려 했기 때문에
mav.addObject()를 하는게 맞아요 (정석임 : 값을 넘겨주려 했으니까)
근데 우리는 command 객체를 사용해 보자는게 목표기 때문에 인자로 MemberVO mVO를 추가
->> header태그에서 value를 memberVO.mid,memberVO.mpw (맨앞을 소문자로시작) 해서 그냥 쓸 수 있음
package com.spring.view.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import com.spring.biz.board.BoardDAO;
import com.spring.biz.board.BoardVO;
import com.spring.biz.member.MemberVO;
@Controller
public class MainController {
@RequestMapping(value="/main.do")
public String main(@ModelAttribute("mem")MemberVO mVO, BoardVO bVO, BoardDAO bDAO, Model model) {
System.out.println("searchCondition: "+bVO.getSearchCondition());
System.out.println("searchContent: "+bVO.getSearchContent());
mVO.setMid("test");
mVO.setMpw("1234");
System.out.println("MainController 로그");
// model.addAttribute("mem", mVO);
model.addAttribute("datas", bDAO.selectAll(bVO));
return "main.jsp";
}
}
Command객체는 별도의 설정없이 바로 VIEW에서 EL식으로 사용가능함!
단, 클래스타입을 소문자로 시작해야함!(객체명이 아니라 클래스 타입임)
그럼 mid랑 mpw의 값을 MainController에서 넣었어야 하는거
mVO.setMid("test");
mVO.setMpw("!234");
그럼 main에서 test 1234셋이 되어있는걸 볼 수 있음
===>>> 일반적인 경우는 아님 (이렇게 하려면 DB를 알고 있는 VIEW여야 하기때문에 흔하지 않음; 보통 C가 test할려고 쓰는겁니당)
일반적으로는 값을 VIEW에 넘겨야 하면 ModelandView를 사용함!
<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:if test="${empty member}">
<form action="login.do" method="post">
아이디 <input type="text" name="mid" value="${mem.mid}" required> <br>
비밀번호 <input type="password" name="mpw" value="${mem.mpw}" required> <br>
<input type="submit" value="로그인">
</form>
</c:if>
<c:if test="${not empty member}">
<a href="logout.do">로그아웃</a>
<br>
<a href="insertBoard.do">글 작성</a>
</c:if>
뷰가 C에게 테트스계정 mem이라고 하겠다고 하는 상황 : C야 니가 테스트계정 만들라고 했으니까 내가 mem이라고 했어
C는 알겠어 하며넛 위와 같이 작업하면서 추가함 MemberVO mVO 인자를 -> @ModelAttribute("mem")
- 뷰님 제가 mem이라고 이름 지어놨으니 거기서 꺼내서 쓰십시오
↓
현재, VIEW가 VO를 알고있는 상황 (냅두면안됨)
보통은, VIEW가 VO를 모르기때문에 추가로 @ModelAttribute("이름")을 사용해서 객체를 VIEW에 넘겨줌!
왜냐면 MAV대신에 Model을 쓰는경우 때문에
[ MAV ---->> Model ] 보편적으로 model을 씀
MainController
output을 String으로 두는게 훨씬 전송이 가벼워짐
return "main.jsp"만 하면 되고 더이상 ModelAndView를 사용할 필요가 없음 그냥
Model을 씀
Model model = new Model(); <<-- 어 new가 있네?? 이걸 인자로 넘긴다 : Model model
model.addAttribute("datas", bDAO.selectAll(null));
C의 output을 String으로 유지하는것이 좋겠다
C객체의 메서드 output이 String이거나 MAV였음
C 객체의 메서드 output을 가볍기때문에 String으로 권장하는 상황.
MAV대신에 -> Model을 사용합니다
model.addAttribute("mem",mVO); 그럼 멤버 가 있었어야 함 Member mVO = new MemberVO(); 근데 new가 있네??
그래서 인자로 MemberVO라고 해도 되는데 @ModelAttribute("mem")함 : 코드 대신에 @
무조건 코드를 줄이는 것 보다 보통 가독성 때문에 model.addAttribute("mem",mVO)를 선호함 (아직까지는)