Servlet상품4: 상품수정·인기상품처리

AdminGoodsFrontController.java의 doProcess()의 주소비교 후 처리부분에 코드 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
	//상품수정
}else if(command.equals("/AdminGoodsModify.ag")){
System.out.println("C: /AdminGoodsModify.ag 호출");
//.ag -> Action_DAO_DB ->.jsp로 이동
action = new AdminGoodsModifyFormAction();
try { forward = action.execute(request, response);
} catch (Exception e) { e.printStackTrace(); }
}else if(command.equals("/AdminGoodsModifyAction.ag")){
//.jsp -> Action_DAO_DB ->.ag로 이동
action = new AdminGoodsModifyProAction();
try { forward = action.execute(request, response);
} catch (Exception e) { e.printStackTrace(); }
}




AdminGoodsModifyFormAction.java 생성

  • request영역에 저장할때 아래 두코드를 모두 사용할 수 있다. 두 코드는 동일한 코드이다. 여러번 사용할 변수가 아니면 2번 코드를 사용하는 것이 더 적합하다.
    • request.setAttribute("gdto", gdto);
    • request.setAttribute("gdto", agdao.getGoods(gno));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class AdminGoodsModifyFormAction implements Action {

@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println("M : AdminGoodsModifyFormAction의 execute() 호출");

//관리자계정확인(세션 ID)
HttpSession session = request.getSession();
String id = (String)session.getAttribute("id");
ActionForward forward = new ActionForward();
if(id == null || !id.equals("admin")){
//response.sendRedirect("./Main.me"); 컨트롤러통해서 이동시키기
forward.setPath("./Main.me");
forward.setRedirect(true);
return forward;
}

//전달된 파라미터값 저장
int gno = Integer.parseInt(request.getParameter("gno"));

//AdminGoodsDAO 객체생성 -> getGoods(gno)
//상품번호에 해당하는 상품정보 전체 가져오기
AdminGoodsDAO agdao = new AdminGoodsDAO();
GoodsDTO gdto = agdao.getGoods(gno);
System.out.println("M : "+gdto);

//request영역에 저장(아래 두코드는 동일한 코드. 여러번 사용할 변수가 아니면 2번 코드가 더 적합)
request.setAttribute("gdto", gdto);
//request.setAttribute("gdto", agdao.getGoods(gno));

//view페이지로 이동 ('./admingoods/admin_goods_modify.jsp')
forward.setPath("./admingoods/admin_goods_modify.jsp");
forward.setRedirect(false);
return forward;
}

}




admin_goods_modify.jsp 생성

  • 이미지를 제외한 input태그들만 수정가능하도록 만들기
  • EL태그를 사용하여 request객체로 전달받은 값들을 나타낼 수 있다.
    1. jsp페이지에 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 코어라이브러리추가
    2. request객체안의 정보를 담은 변수를 선언. => GoodsDTO gdto = (GoodsDTO) request.getAttribute("gdto");
    3. gdto.set()명으로 불러오면 된다. => ${gdto.name}
  • 카테고리가 선택되어있지 않은 경우 아래 두 코드 중 원하는 코드를 사용하면 된다. 두 코드는 동일한 결과값을 가진다.
    • if(gdto.getCategory().equals("")){ %> selected <% } %>
    • if(gdto.getCategory() == null){ %> selected <% } %>
  • 인기상품은 0인 경우 아니요 1인 경우예로 데이터처리
  • tmp는 DB의 몇개의 row가 영향을 받느냐를 나타내는데 여기서는 gno컬럼이 pk이므로 1 또는 0만 나옴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<%
//관리자만 페이지 볼 수 있게 추가
String id = (String) session.getAttribute("id");
if(id == null || !id.equals("admin")){
response.sendRedirect("./Main.me");
}
//저장된 정보 가져오기
GoodsDTO gdto = (GoodsDTO) request.getAttribute("gdto");
%>
<fieldset>
<legend>상품수정</legend>
<form action="./AdminGoodsModifyAction.ag?" method="post" name="fr">
<input type="hidden" name="gno" value="<%=gdto.getGno()%>">
<table border="1">
<tr>
<td>카테고리</td>
<td>
<select name="category">
<option value=""
<% if(gdto.getCategory().equals("")){ %> selected <% } %>
<%--이것도가능 <% if(gdto.getCategory() == null){ %> selected <% } %> --%>
>선택하세요</option>
<option value="outwear"
<% //selected 속성으로 제어가능
if(gdto.getCategory().equals("outwear")){ %> selected <% } %>
>아우터</option>
<option value="fulldress"
<% if(gdto.getCategory().equals("fulldress")){ %> selected <% } %>
>정장</option>
<option value="Tshirts"
<% if(gdto.getCategory().equals("Tshirts")){ %> selected <% } %>
>티셔츠</option>
<option value="shirts"
<% if(gdto.getCategory().equals("shirts")){ %> selected <% } %>
>셔츠</option>
<option value="pants"
<% if(gdto.getCategory().equals("pants")){ %> selected <% } %>
>바지</option>
<option value="shoes"
<% if(gdto.getCategory().equals("shoes")){ %> selected <% } %>
>신발</option>

</select>
</td>
</tr>
<tr>
<td>상품이름</td>
<td><input type="text" name="name" value="${gdto.name}"></td>
</tr>
<tr>
<td>판매가격</td>
<td><input type="text" name="price" value="${gdto.price}"></td>
</tr>
<tr>
<td>색상</td>
<td><input type="text" name="color" value="${gdto.color}"></td>
</tr>
<tr>
<td>수량</td>
<td><input type="text" name="amount" value="<%=gdto.getAmount() %>"></td>
</tr>
<tr>
<td>사이즈</td>
<td><input type="text" name="size" value="<%=gdto.getSize()%>"></td>
</tr>
<tr>
<td>제품정보</td>
<td><input type="text" name="content" value="<%=gdto.getContent() %>"></td>
</tr>
<tr>
<td>인기상품등록</td> <!-- best 0-아니요 1-예로 데이터처리 -->
<td>
<input type="radio" name="best" value="1"
<%if(gdto.getBest() == 1){ %> checked <%} %>
>예
<input type="radio" name="best" value="0"
s <%if(gdto.getBest() == 0){ %> checked <%} %>
>아니요
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="상품수정">
<input type="reset" value="초기화">
<input type="button" value="뒤로가기" onclick="location.href='./AdminGoodsList.ag'">
</td>
</tr>
</table>
</form>
</fieldset>




AdminGoodsDAO.java 생성 후 getGoods(int gno)메서드 코드 추가

  • 추후 spring framework를 하면 DTO에 담는 작업(dto.set()작업)은 스프링이 자동으로 진행해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//상품정보 가져오기
public GoodsDTO getGoods(int gno) {
GoodsDTO gdto = null;
try{
getCon();
sql ="select * from itwill_goods where gno=?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, gno);
rs = pstmt.executeQuery();
if(rs.next()){
//추후 spring framework를 하면 DTO에 담는 작업은 스프링이 자동으로 진행해준다
gdto = new GoodsDTO();
gdto.setAmount(rs.getInt("amount"));
gdto.setBest(rs.getInt("best"));
gdto.setCategory(rs.getString("category"));
gdto.setColor(rs.getString("color"));
gdto.setContent(rs.getString("content"));
gdto.setDate(rs.getDate("date"));
gdto.setGno(rs.getInt("gno"));
gdto.setName(rs.getString("name"));
gdto.setPrice(rs.getInt("price"));
gdto.setSize(rs.getString("size"));
gdto.setImage(rs.getString("image"));
}
System.out.println("해당 상품정보 저장 완료");
}catch(Exception e){
e.printStackTrace();
}finally {
closeDB();
}
return gdto;
}//end of getGoods




AdminGoodsModifyProAction.java 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class AdminGoodsModifyProAction implements Action{

@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println("M : AdminGoodsModifyProAction의 execute() 호출");

//관리자계정확인(세션 ID)
HttpSession session = request.getSession();
String id = (String)session.getAttribute("id");
ActionForward forward = new ActionForward();
if(id == null || !id.equals("admin")){
//response.sendRedirect("./Main.me"); 컨트롤러통해서 이동시키기
forward.setPath("./Main.me");
forward.setRedirect(true);
return forward;
}

//한글처리
request.setCharacterEncoding("UTF-8");

//전달되는 파라미터값 GoodsDTO로 받아서 사용
GoodsDTO gdto = new GoodsDTO();
gdto.setAmount(Integer.parseInt(request.getParameter("amount")));
gdto.setBest(Integer.parseInt(request.getParameter("best")));
gdto.setCategory(request.getParameter("category"));
gdto.setColor(request.getParameter("color"));
gdto.setContent(request.getParameter("content"));
gdto.setGno(Integer.parseInt(request.getParameter("gno")));
gdto.setName(request.getParameter("name"));
gdto.setPrice(Integer.parseInt(request.getParameter("price")));
gdto.setSize(request.getParameter("size"));

//DB수정을 위해 DAO생성 -> modifyGoods(gdto)
AdminGoodsDAO agdao = new AdminGoodsDAO();
agdao.modifyGoods(gdto);

//리스트 페이지이동
forward.setPath("./AdminGoodsList.ag");
forward.setRedirect(true);
return forward;
}

}




AdminGoodsDAO.java 생성 후 modifyGoods(GoodsDTO gdto)메서드 코드 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//상품수정
public void modifyGoods(GoodsDTO gdto) {
try{
getCon();
sql="update itwill_goods set category=?,name=?,price=?,color=?,amount=?,"
+ "size=?,content=?,best=? where gno=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, gdto.getCategory());
pstmt.setString(2, gdto.getName());
pstmt.setInt(3, gdto.getPrice());
pstmt.setString(4, gdto.getColor());
pstmt.setInt(5, gdto.getAmount());
pstmt.setString(6, gdto.getSize());
pstmt.setString(7, gdto.getContent());
pstmt.setInt(8, gdto.getBest());
pstmt.setInt(9, gdto.getGno());
int tmp = pstmt.executeUpdate();
System.out.println("DAO : 상품정보 수정완료"+ tmp);
}catch(Exception e){
e.printStackTrace();
}finally {
closeDB();
}
}//end of modifyGoods