반응형
목표
제품명 클릭 - 제품 상세보기 - 수정 기능이다.
list.jsp
list.jsp에서 제품명 (vo.name)에 디테일 페이지를 연결해준다.
<tr>
<td>${vo.num }</td>
<td><a href = "/webApp2/product/detail?num=${vo.num }">${vo.name }</a></td>
<!-- product의 디테일 서블릿 만들기 -->
<td>${vo.price }</td>
<td>${vo.amount }</td>
</tr>
Detail.java - doGet
1) Detail.java 서블릿을 생성해 이전 페이지에서 번호를 받아와 번호로 검색하기를 한다.
2) request.setAttribute 에 담아 detail.jsp 페이지로 이동한다.
package product.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import product.ProductService;
import product.ProductVo;
/**
* Servlet implementation class Detail
*/
@WebServlet("/product/detail")
public class Detail extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Detail() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
// num을 int 로 받아와 service 기능 이용해 번호로 검색, 검색 결과를 vo에 담아 detail.jsp 생성
// 폼 파라메터 읽기
int num = Integer.parseInt(request.getParameter("num"));
ProductService service = new ProductService();
ProductVo vo = service.getByNum(num); // 서비스 기능 중 번호로 검색
request.setAttribute("vo", vo); // request 에 담아서
// detail.jsp 로 이동
RequestDispatcher dis = request.getRequestDispatcher("/product/detail.jsp");
dis.forward(request, response);
}
detail.jsp
제품 상세페이지이다. num 과 name 은 readonly로 수정이 불가능하도록 하여, price 와 amount 만 수정이 가능하다.
수정 버튼을 클릭하면 /product/detail의 post, 즉 Datial.java 페이지로 정보가 넘어간다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>상품 상세 페이지</h3>
<form action = "/webApp2/product/detail" method = "post">
<table border = "1">
<!-- name의 value 값을 Detail 서블릿 에서 받아간다 -->
<tr><th>num </th><td><input type = "text" name = "num" value = ${vo.num } readonly> </td></tr>
<tr><th>name </th><td><input type = "text" value = ${vo.name } readonly></td></tr>
<tr><th>price </th><td><input type = "number" name = "price" value = ${vo.price }></td></tr>
<tr><th>amount </th><td><input type = "number" name = "amount" value = ${vo.amount }></td></tr>
<tr><th>수정</th><td><input type = "submit" value = "수정"></td></tr>
<!-- 담은 값을 el 표현식 vo.num으로 부른다. -->
</table>
</form>
</body>
</html>
Detail.java - doPost
detail.jsp 페이지에서 넘어온 정보를 doPost 에서 담는다.
getParameter로 넘어온 정보를 받고, 이를 생성한 서비스 객체에 담는다.
이때, num은 수정하지 않았지만 sql 문에 num 이 있기 때문에 받아와 ProductVo에 넘겨준다.
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
int num = Integer.parseInt(request.getParameter("num"));
int price = Integer.parseInt(request.getParameter("price"));
int amount = Integer.parseInt(request.getParameter("amount"));
ProductService service = new ProductService();
service.editProduct(new ProductVo(num, "", price, amount));
response.sendRedirect("/webApp2/product/list");
//jsp 페이지는 .jsp를 붙임. 서블릿 url은 위와 같이끝남.
}
}
반응형