관리 메뉴

공부한것들을 정리하는 블로그 입니다.

4. @RequestParam, @ModelAttribute 사용하기 본문

(2019) 사이드 프로젝트/BoardWeb2(게시판-SpringMVC)

4. @RequestParam, @ModelAttribute 사용하기

호 두 2019. 11. 26. 14:26
반응형

 

 

1. @RequestParam 사용하기

 

- Command 객체(VO)를 이용하면 클라이언트에서 넘겨준 요청 파라미터 정보를 받아낼 수 있다

- 하지만 이를 위해서는 반드시 요청 파라미터와 매핑될 변수와 Setter 메소드가 Command 클래스에 선언되어 있어야 한다.

- 하지만 Command 객체에는 없는 파라미터를 Controller 클래스에서 사용해야 할 경우가 있다.

- Spring MVC에서는 HTTP 요청 파라미터 정보를 추출하기 위한 @RequestParam을 제공한다.

 

 

 

2. @ModelAttribute 사용하기

 

- 매개변수에 사용되는 @ModelAttribute는 Command 객체(VO)의 이르믕ㄹ 변경 할 목적으로 사용 할 수 있다.

 

- 메소드에 사용되는 @ModelAttribute는, @RequestMapping 어노테이션이 적용된 메소드보다 먼저 호출된다.

- 그리고 @ModelAttribute 메소드 실행 결과로 리턴된 객체는, 자동으로 Model에 저장된다.

- 따라서 @ModelAttribute 메소드의 실행 결과로 리턴된 객체를 View 페이지에서 사용 할 수 있다.

 

 

 

 

ex) 예제

 

순서 :

1. 클라이언트가 /getBoardList.do 요청 전송

2. @ModelAttribute 메서드인 searchConditionMap() 메소드가 먼저 실행

3. @ModelAttribute 메서드 실행 결과가 리턴되어 Model 객체에 저장된다 -> [ 컬렉션1 : "conditionMap" ] 생성

4. 클라이언트가 호출한 getBoardList() 메소드가 실행

5. 메소드가 실행되어 DAO를 boardList 라는 이름의 Model에 저장된다.  -> [ 컬렉션2 : "boardList" ] 생성

6. getBoardList() 메소드가 리턴한 getBoardList.jsp 파일에서 Model에 저장된 2개의 컬렉션을 모두 사용 할 수 있다.

 

 

- getBoardList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>글 목록</title>
</head>
<body>
	<center>
		<h1>글 목록</h1>
		<h3>${userName}님 환영합니다....<a href="logout.do">log out</a></h3>
	
		<!--  검색 시작  -->
		<form action="getBoardList.do" method="post">
			<table border="1" cellpadding="0" cellspacing="0" width="700">
				<tr>
					<td align="right">
						<select name="searchCondition">
							<c:forEach items="${conditionMap}" var="option">
								<option value="${option.value}">${option.key}</option>
							</c:forEach>
						</select>
						<input name="searchKeyword" type="text">
						<input type="submit" value="검색 ">
					</td>
				</tr>		
			</table>
		</form>
		<!-- 검색 종료  -->
	
		<table border="1" cellpadding="0" cellspacing="0" width="700">
			<tr>
				<th bgcolor="orange" width="100">번호</th>
				<th bgcolor="orange" width="200">제목</th>
				<th bgcolor="orange" width="150">작성자</th>
				<th bgcolor="orange" width="150">등록일</th>
				<th bgcolor="orange" width="100">조회수</th>
			</tr>
			<c:forEach items="${boardList }" var="board">
				<tr>
					<td>${board.seq }</td>
					<td align="left">
						<a href="getBoard.do?seq=${board.seq }">
							${board.title }
						</a>
					</td>
					<td>${board.writer }</td>
					<td>${board.regDate }</td>
					<td>${board.cnt }</td>
				</tr>
			</c:forEach>
		</table>
		<br>
		<a href="insertBoard.jsp">새 글 등록</a>
	</center>
</body>
</html>

 

- LoginController.java

package com.springbook.view.user;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.springbook.biz.user.UserVO;
import com.springbook.biz.user.impl.UserDAO;

@Controller
public class LoginController {

	@RequestMapping(value="/login.do", method=RequestMethod.GET)
	public String loginView(@ModelAttribute("user") UserVO vo) {
		System.out.println("로그인 화면으로 이동");
		
		vo.setId("user1");
		vo.setPassword("user1");
		return "login.jsp";
	}
	
	@RequestMapping(value="/login.do", method=RequestMethod.POST)
	public String login(UserVO vo, UserDAO userDAO, HttpSession session) {
		System.out.println("로그인 처리");
		
		UserVO user = userDAO.getUser(vo);
		if(user != null) {
			session.setAttribute("userName", user.getName());
			return "getBoardList.do";
		} else { 
			return "login.jsp";
		}
	}
}

 

 

 

 

 

반응형
Comments