IT_developers

Java Team Project - 온라인/오프라인 플리마켓 Solmarket! 소스 정리 본문

Project

Java Team Project - 온라인/오프라인 플리마켓 Solmarket! 소스 정리

developers developing 2022. 8. 28. 12:00

https://github.com/ycr5007/SolMarket : 플리마켓 git 주소

판매자 소스 정리

<java>

  • controller ==> service ==> serviceImpl ==> mapper.java == mapper.xml 

1. controller [ProductController.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
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
package com.solmarket.controller;
 
import java.security.Principal;
import java.util.ArrayList;
import java.util.List;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
import com.solmarket.dto.Criteria;
import com.solmarket.dto.MarketDTO;
import com.solmarket.dto.PageDTO;
import com.solmarket.dto.ProductDTO;
import com.solmarket.dto.ProductListDTO;
import com.solmarket.dto.UserDTO;
import com.solmarket.mapper.MemberMapper;
import com.solmarket.service.ProductService;
 
import lombok.extern.slf4j.Slf4j;
 
@Controller
@RequestMapping("/product/*")
@Slf4j
public class ProductController {
    
    @Autowired
    private ProductService service;
    
    @Autowired
    private MemberMapper mapper;
    
    
    //화면 첫 페이지 : 오픈예정 + 참여중인 장터, 상품 목록 보여주기
    @GetMapping("/product_index")
    public void seller_home(Model model) {
        log.info("판매자 관리 페이지 요청");
 
        List<MarketDTO> mList = service.mList();
        List<MarketDTO> oList = service.oList();        
        List<ProductDTO> pList = service.pList();
                
        // "mList" : jsp에서 사용할 item이름과 동일
        model.addAttribute("mList",mList);
        model.addAttribute("oList",oList);
        model.addAttribute("pList",pList);
    }
    
    // 상품 등록
    @GetMapping("/product_register")
    public void register(Principal principal,@ModelAttribute("marketNo"int marketNo, Model model) {
        // 판매자 정보 가지고오기
        String userid = principal.getName();
        log.info("product_register 폼 요청"+ userid);
        UserDTO userDto = mapper.read(userid);
 
        model.addAttribute("user", userDto);
        model.addAttribute("marketName", service.marketName(marketNo));
    }
    
    // 상품 등록 : List로 받기
    @PostMapping("/product_register")
    public String registerPost(ProductListDTO proList, RedirectAttributes rttr) {
        log.info("상품 등록 폼 전송 "+ proList);
        
        
        boolean rs =  service.insert(proList);            
        int userNo = proList.getProList().get(0).getUserNo();
            log.info("" +userNo);
        rttr.addAttribute("userNo", userNo);        
        rttr.addFlashAttribute("msg""상품 등록이 완료되었습니다!");
        
        return "redirect:/product/product_list";
        
    }
    
    // 상품 수정 및 목록 보여주기
    @GetMapping({"/product_modify","/product_read"})
    public void modify(Principal principal,@ModelAttribute("productNo"int productNo, Model model, @ModelAttribute("cri") Criteria cri) {
        log.info("상품 내역 폼 요청");
        // 판매자 정보 가지고오기
        String userid = principal.getName();
        log.info(userid);
        
        UserDTO userDto = mapper.read(userid);
        ProductDTO dto = service.getRow(productNo);
        //페이징
        model.addAttribute("user", userDto);
        model.addAttribute("pageNum", cri.getPageNum());
        model.addAttribute("amount", cri.getAmount()); 
        model.addAttribute("dto", dto);
    }
    
    // 상품 수정하기_ 상품 수정이 완료되고 read.jsp되돌아가기 때문에 user 정보는 필요 없음
    @PostMapping("/product_modify")
    public String modifyPost(Principal principal, ProductDTO updateDto, @ModelAttribute("cri") Criteria cri, RedirectAttributes rttr) {
        log.info("온라인 상품으로 등록");
        
        if(service.update(updateDto)) {
            // 수정 성공 시
            rttr.addAttribute("productNo", updateDto.getProductNo());
            rttr.addAttribute("pageNum", cri.getPageNum());
            rttr.addAttribute("amount", cri.getAmount());
            
        }
        return "redirect:/product/product_read";
    }
    
    // 상품 리스트 보여주기
    @GetMapping("/product_list")
    public void list(Principal principal, Model model,@ModelAttribute("cri") Criteria cri) {
        log.info("상품 리스트 요청===== "+principal.getName());
        // 판매자 정보 가지고오기
        String userid = principal.getName();
        UserDTO userDto = mapper.read(userid);
        List<ProductDTO> list = service.getList(cri, userDto.getUserNo());
 
        // 페이징
        int total = service.getTotalCnt(userDto.getUserNo());
        log.info("pageDTO : " + new PageDTO(cri, total));
        model.addAttribute("user", userDto);
        model.addAttribute("pageDto"new PageDTO(cri, total));
        model.addAttribute("list",list);
 
    }
        
    // 장터 리스트 보여주기
    @GetMapping("/product_market_list")
    public void marketList(Principal principal, Model model,@ModelAttribute("cri") Criteria cri) {
        log.info("오픈 예정 장터 리스트 요청");
        String userid = principal.getName();
        UserDTO userDto = mapper.read(userid);
        log.info(""+userDto);
        List<MarketDTO> marketList = service.marketList(cri, userDto.getUserNo());
 
        // 페이징
        int total = service.marketTotal(cri);
        log.info("pageDTO : " + new PageDTO(cri, total));
        model.addAttribute("user", userDto);
        model.addAttribute("pageDto"new PageDTO(cri, total));
        model.addAttribute("marketList",marketList);
    }
 
    // 장터 종료 후 남은 상품 보여주기 상품 상태 == 3 
    @GetMapping("/product_sell_list")
    public void sellerList(Principal principal,Model model,@ModelAttribute("cri") Criteria cri) {
        log.info("장터 종료 후 상품 리스트 요청");
        // 판매자 정보 가지고오기
        String userid = principal.getName();
        UserDTO userDto = mapper.read(userid);
        List<ProductDTO> sellList = service.sellList(cri, userDto.getUserNo());
 
        // 페이징
        int total = service.sellTotal(userDto.getUserNo());
        log.info("pageDTO : " + new PageDTO(cri, total));
        model.addAttribute("user", userDto);
        model.addAttribute("pageDto"new PageDTO(cri, total));
        model.addAttribute("sellList",sellList);
    }
    
    // 장터 종료 후 남은 상품 보여주기 상품 상태 == 4 
    @GetMapping("/product_remain_list")
    public void remainList(Principal principal,Model model,@ModelAttribute("cri") Criteria cri) {
        log.info("장터 종료 후 상품 리스트 요청");
        // 판매자 정보 가지고오기
        String userid = principal.getName();
        log.info(userid);
        UserDTO userDto = mapper.read(userid);
        List<ProductDTO> remainList = service.remainList(cri, userDto.getUserNo());
 
        // 페이징
        int total = service.remainTotal(userDto.getUserNo());
        log.info("pageDTO : " + new PageDTO(cri, total));
        model.addAttribute("user", userDto);
        model.addAttribute("pageDto"new PageDTO(cri, total));
        model.addAttribute("remainList",remainList);
    }
    
    // 온라인 상품 보여주기, 상품 상태 == 5
    @GetMapping("/product_online_list")
    public void onlineList(Principal principal, Model model,@ModelAttribute("cri") Criteria cri) {
        log.info("온라인 판매 상품 보내주기");
        // 판매자 정보 가지고오기
        String userid = principal.getName();
        UserDTO userDto = mapper.read(userid);
        List<ProductDTO> onlineList = service.onlineList(cri, userDto.getUserNo());
 
        // 페이징
        int total = service.onlineTotal(userDto.getUserNo());
        log.info("pageDTO : " + new PageDTO(cri, total));
        model.addAttribute("user", userDto);
        model.addAttribute("pageDto"new PageDTO(cri, total));
        model.addAttribute("onlineList",onlineList);
    }
    
    // 참여중인 장터 보여주기
    @GetMapping("/product_ingmarket_list")
    public void ingMarketList(Principal principal, Model model, @ModelAttribute("cri") Criteria cri) {
        log.info("참여 중인 장터 리스트 요청");
 
        // 판매자 정보 가지고오기
        String userid = principal.getName();
        UserDTO userDto = mapper.read(userid);
        List<MarketDTO> ingMarketList = service.ingMarketList(cri, userDto.getUserNo());
 
        // 페이징
        int total = service.ingMarketTotal(cri);
        log.info("pageDTO : " + new PageDTO(cri, total));
        model.addAttribute("user", userDto);
        model.addAttribute("pageDto"new PageDTO(cri, total));
        model.addAttribute("ingMarketList", ingMarketList);
    }
}
 
cs
 

 

2. DTO[ProductDTO.java, ProductListDTO.java]

  • ProductDTO.java : 상품 관련
  • ProductListDTO.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
package com.solmarket.dto;
 
import java.util.Date;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
@AllArgsConstructor
@NoArgsConstructor
@Data
public class ProductDTO {
    private int productNo; // 상품 번호
    private int userNo; // 회원 번호 ( myUser 테이블 참조 )
    private int marketNo; // 장터 번호 ( market 테이블 참조 )
    private int categoryNo; // 품목 ( category 테이블 참조 )
    private String productName; // 품명
    private String productContent; // 상품 설명
    private int productQN; // 판매 수량
    private int productPrice; // 판매가
    private int productStatus; // 상품 등록 상태
    private Date productDate; // 상품 등록일 추가 필요
    private int productSale; // 재고 상점 등록시 할인율
    
    
    private String userName; // 회원 이름 ( myUser 테이블 )
    private AttachDTO attach; // 파일첨부 리스트
    private String marketName; // 마켓 테이블에서 마켓 이름 가져오기
}
 
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.solmarket.dto;
 
import java.util.List;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
@NoArgsConstructor
@AllArgsConstructor
@Data
public class ProductListDTO {
    private List<ProductDTO> proList;
}
 
cs

 

3. service[ProductService.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
45
46
47
48
49
50
51
52
53
54
55
package com.solmarket.service;
 
import java.util.List;
 
import org.apache.ibatis.annotations.Param;
 
import com.solmarket.dto.Criteria;
import com.solmarket.dto.MarketDTO;
import com.solmarket.dto.ProductDTO;
import com.solmarket.dto.ProductListDTO;
 
public interface ProductService {
    // 상품 등록 
    public boolean insert(ProductListDTO proList);
    //판매자 이름 가져오기
    public String userName(int userNo);
    // 리스트보여주기
    public List<ProductDTO> getList(@Param("cri")Criteria cri,@Param("userNo")int userNo); 
    // 리스트에서 상품이름 클릭시
    public ProductDTO getRow(int productNo);
    // 리스트 페이징 처리
    public int getTotalCnt(int userNo);
    // 상품 수정 오프라인에서 온라인으로 변경
    public boolean update(ProductDTO updateDto);
    // 장터 이름 가져오기
    public String marketName(int marketNo);
    // 오픈예정 장터 리스트 보여주기
    public List<MarketDTO> marketList(@Param("cri")Criteria cri,@Param("userNo")int userNo); 
    // 오픈 예정 장터 리스트 페이징 처리
    public int marketTotal(Criteria cri);
    // 인덱스에서 참여 중인 장터 리스트 보여주기
    public List<MarketDTO> mList();
    // 인덱스에서 오픈 예정 장터 리스트 보여주기
    public List<MarketDTO> oList();
    // 인덱스에서 상품 리스트 보여주기
    public List<ProductDTO> pList();
    // 판매 상품 리스트
    public List<ProductDTO> sellList(@Param("cri")Criteria cri,@Param("userNo")int userNo);
    // 판매 상품 리스트 페이징
    public int sellTotal(int userNo);
    // 장터 종료 후 남은 상품 리스트
    public List<ProductDTO> remainList(@Param("cri")Criteria cri,@Param("userNo")int userNo);
    // 장터 종료 후 남은 상품 리스트 페이징
    public int remainTotal(int userNo);
    // 온라인 상품 리스트 보여주기
    public List<ProductDTO> onlineList(@Param("cri")Criteria cri,@Param("userNo")int userNo);
    // 온라인 상품 리스트 페이징 처리
    public int onlineTotal(int userNo);
    // 참여 중인 장터 리스트 보여주기
    public List<MarketDTO> ingMarketList(@Param("cri") Criteria cri, @Param("userNo"int userNo);
    // 참여 중인 장터 리스트 페이징 처리
    public int ingMarketTotal(Criteria cri);
 
}
 
cs

 

4. serviceImlp[ProductServiceImpl.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
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package com.solmarket.service;
 
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import com.solmarket.dto.Criteria;
import com.solmarket.dto.MarketDTO;
import com.solmarket.dto.ProductDTO;
import com.solmarket.dto.ProductListDTO;
import com.solmarket.mapper.AttachMapper;
import com.solmarket.mapper.ProductMapper;
 
@Service
public class ProductServiceImpl implements ProductService {
    
    @Autowired
    private ProductMapper mapper;
    
    @Autowired
    private AttachMapper attachMapper;
    
    // 상품 등록
    @Transactional
    @Override
    public boolean insert(ProductListDTO proList) {
        //불린값으로 리턴, 0보다 크면 true, 작으면 false
        proList.getProList().forEach(product -> {
            System.out.println(product);
            mapper.insert(product);        
            attachMapper.insertImg(product.getAttach(), "product");    
                        
        });    
        return true;
    }
    
    // 판매자 이름 가지고 오기
    @Override
    public String userName(int userNo) {
        return mapper.userName(userNo);
    }
 
    // 리스트 보여주기
    @Override
    public List<ProductDTO> getList(Criteria cri, int userNo) {    
        return mapper.select(cri, userNo);
    }
 
    // 리스트에서 상품명 클릭시
    @Override
    public ProductDTO getRow(int productNo) {
        return mapper.read(productNo);
    }
 
    // 리스트 페이징 처리
    @Override
    public int getTotalCnt(int userNo) {
        return mapper.totalCnt(userNo);
    }
 
    // 상품 수정 
    @Override
    public boolean update(ProductDTO updateDto) {
        return mapper.update(updateDto)==1?true:false;
    }
 
    // 장터 이름 가져오기
    @Override
    public String marketName(int marketNo) {
        return mapper.marketName(marketNo);
    }
 
    // 오픈 예정 장터 리스트 보여주기
    @Override
    public List<MarketDTO> marketList(Criteria cri, int userNo) {    
        return mapper.marketList(cri, userNo);
    }
 
    // 오픈 예정 장터 리스트 페이징
    @Override
    public int marketTotal(Criteria cri) {
        return mapper.marketTotal(cri);
    }
 
    // 인덱스에서 참여 중인 장터 리스트 보여주기
    @Override
    public List<MarketDTO> mList() {
        return mapper.mList();
    }
    
    // 인덱스에서 오픈 예정인 장터 리스트 보여주기
    @Override
    public List<MarketDTO> oList() {
        return mapper.oList();
    }
 
    // 인덱스에서 상품 리스트 보여주기
    @Override
    public List<ProductDTO> pList() {
        return mapper.pList();
    }
    
    // 판매 중인 상품 리스트 보여주기
    @Override
    public List<ProductDTO> sellList(Criteria cri, int userNo) {        
        return mapper.sellList(cri, userNo);
    }
    
    // 판매 중인 상품 리스트 페이징
    @Override
    public int sellTotal(int userNo) {        
        return mapper.sellTotal(userNo);
    }
 
    // 장터 종료 후 남은 상품 리스트 보여주기
    @Override
    public List<ProductDTO> remainList(Criteria cri, int userNo) {
        return mapper.remainList(cri, userNo);
    }
 
    // 장터 종료 후 남은 상품 리스트 페이징
    @Override
    public int remainTotal(int userNo) {        
        return mapper.remainTotal(userNo);
    }
    
    // 온라인 상품 리스트 보여주기
    @Override
    public List<ProductDTO> onlineList(Criteria cri, int userNo) {
        return mapper.onlineList(cri, userNo);
    }
    
    // 온라인 상품 리스트 페이징
    @Override
    public int onlineTotal(int userNo) {
        return mapper.onlineTotal(userNo);
    }
    
    // 참여중인 장터 리스트 보여주기
    @Override
    public List<MarketDTO> ingMarketList(Criteria cri, int userNo) {
        return mapper.ingMarketList(cri, userNo);
    }
    
    // 참여중인 장터 리스트 페이징
    @Override
    public int ingMarketTotal(Criteria cri) {
        return mapper.ingMarketTotal(cri);
    }    
 
}
 
cs

 

5. mapper[ProductMapper.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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.solmarket.mapper;
 
import java.util.List;
 
import org.apache.ibatis.annotations.Param;
 
import com.solmarket.dto.Criteria;
import com.solmarket.dto.MarketDTO;
import com.solmarket.dto.ProductDTO;
import com.solmarket.dto.ProductListDTO;
 
public interface ProductMapper {
    
    // 마켓 참여 신청 및 상품 등록
    public int insert(ProductDTO product);
    // 판매자 이름 가져오기
    public String userName(int userNo);
    // 상품 리스트 보여주기
    public List<ProductDTO> select(@Param("cri")Criteria cri,@Param("userNo")int userNo);
    // 리스트에서 상품명 클릭시
    public ProductDTO read(int productNo);
    // 상품 리스트 페이징 처리
    public int totalCnt(int userNo);
    // 마켓 등록한 상품 수정
    public int update(ProductDTO updateDto);
    // 장터 이름 가져오기
    public String marketName(int martketNo);
    //오픈 예정 장터 리스트 보여주기
    public List<MarketDTO> marketList(@Param("cri")Criteria cri,@Param("userNo")int userNo);
    // 장터 리스트 페이징 처리
    public int marketTotal(Criteria cri);
    // 인덱스에서 참여 중인 장터 리스트 보여주기
    public List<MarketDTO> mList();
    // 인덱스에서 오픈 예정 장터 리스트 보여주기
    public List<MarketDTO> oList();
    // 인덱스에서 상품 리스트 보여주기
    public List<ProductDTO> pList();
    // 판매 상품 리스트 보여주기
    public List<ProductDTO> sellList(@Param("cri")Criteria cri,@Param("userNo")int userNo);
    // 판매 상품 리스트 페이징
    public int sellTotal(int userNo);
    // 장터 종료 후 재고 상품 리스트 보여주기
    public List<ProductDTO> remainList(@Param("cri")Criteria cri,@Param("userNo")int userNo);
    // 장터 종료 후 재고 상품 리스트 페이징
    public int remainTotal(int userNo);
    // 온라인 상품 리스트 보여주기
    public List<ProductDTO> onlineList(@Param("cri")Criteria cri,@Param("userNo")int userNo);
    // 온라인 상품 리스트 페이징 처리
    public int onlineTotal(int userNo);
    // 참여중인 장터 리스트 보여주기
    public List<MarketDTO> ingMarketList(@Param("cri")Criteria cri,@Param("userNo")int userNo);
    // 장터 리스트 페이징 처리
    public int ingMarketTotal(Criteria cri);    
    // 마켓 등록한 상품 삭제
    public int delete();
    //재고상점 상품 이동 및 상품 수정
    public int updateProduct();    
    // 재고상점 상품 삭제
    public int deleteProduct();
    
}
 
cs

 

6. mapper.xml[ProductMapper.xml]

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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.solmarket.mapper.ProductMapper">
 
    <!-- db컬럼명 as 별칭== DTO/ -->
    
    <!-- 상품등록 -->
    <insert id="insert">
        insert into product
            (product_no, user_no, market_no, category_no, product_name, product_qn, product_price, product_content)
        values(product_seq.nextval,#{userNo},#{marketNo},#{categoryNo},#{productName},#{productQN},#{productPrice},#{productContent})
    </insert>
    
    <!-- 판매자 이름 가져오기 -->
    <select id="userName" resultType="string">
        select user_name from myuser where user_no = #{userNo}
    </select>
    
    <!-- 장터 이름 가져오기 -->
    <select id="marketName" resultType="string">
        select market_name from market where market_no = #{marketNo}
    </select>
    
    <!-- 상품 목록 조회 :  페이지 나누기 전
    <select id="select" resultType="com.solmarket.dto.ProductDTO">
        select 
            p.product_no as productNo, m.market_name as dummy,
            p.product_name as productName, p.product_price as productPrice,
            p.product_content as productContent, p.product_date as productDate,
            p.product_status as productStatus
        
        from product p join market m on p.market_no = m.market_no 
        where product_no>= 0 order by product_no desc
    </select>-->    
    
    <!-- 상품 목록 조회 : 페이지 나누기 -->    
    <select id="select" resultType="com.solmarket.dto.ProductDTO">
        <![CDATA[
        select * from 
            (select rownum as num, statusList.* from
                (select user_name as userName, p.* from 
                    (select p.product_no as productNo, m.market_name as marketName,
                            p.user_no as userNo, p.market_no as marketNo,
                            p.product_name as productName, p.product_price as productPrice,
                            p.product_content as productContent, p.product_date as productDate,
                            p.product_status as productStatus
                    from product p left outer join market m on p.market_no = m.market_no 
                    where p.user_no = #{userNo} order by p.product_status asc, p.product_no desc) p 
                left outer join myUser u on p.userNo = u.user_no) statusList
                where rownum <= (#{cri.pageNum} * #{cri.amount}))
            where num > (#{cri.pageNum} - 1) * #{cri.amount}
        ]]>
    </select>    
    
    <!-- 리스트에서 상품명 클릭시 -->
    <select id="read" resultType="com.solmarket.dto.ProductDTO">
        select product_no as productNo, product_name as productName, product_qn as productQN,
             product_content as productContent, product_price as productPrice, product_status as productStatus
        from product
        where product_no=${productNo}
    </select>
 
    <!-- 페이지 total 게시물보여주기 -->
    <select id="totalCnt" resultType="int">
        select count(*) from product
        where user_no =#{userNo}    
    </select>    
 
    <!-- 재고상점 등록 : 상품 번호가 일치한다면 상품 수량,  할인율 적용, 상태 변경,  -->
    <update id="update">
        update product
        set product_qn=#{productQN}, product_sale = #{productSale}, product_status=5
        where product_no=#{productNo}
    </update>
 
    <!-- 오픈 예정 장터 리스트 보여주기 -->
    <select id="marketList" resultType="com.solmarket.dto.MarketDTO">    
        <![CDATA[
        select num, marketNo, marketName,  marketSD,marketED,  marketLoc
        from (select /*+INDEX_DESC(market pk_market)*/
                 rownum as num, market_no as marketNo, market_name as marketName, market_sd as marketSD,market_ed as marketED, market_loc as marketLoc
             from market
             where rownum <= (#{cri.pageNum} * #{cri.amount}) and market_status = 1 )
        where num > (#{cri.pageNum} - 1) * #{cri.amount}
        ]]>
    </select>
    
    <!-- 오픈 예정 장터 리스트 페이징 -->
    <select id="marketTotal" resultType="int">
        select count(*) from market
        where market_status = 1
    </select>
    
    <!-- 인덱스에서 참여 중인 장터 리스트 보여주기 -->
    <select id="mList" resultType="com.solmarket.dto.MarketDTO">
        select market_no as marketNo, market_name as marketName, market_sd as marketSD, market_loc as marketLoc
        from market
        where market_status = 2
    </select>
    
    <!-- 인덱스에서 오픈 예정 장터 리스트 보여주기 -->
    <select id="oList" resultType="com.solmarket.dto.MarketDTO">
        select market_no as marketNo, market_name as marketName, market_sd as marketSD, market_loc as marketLoc
        from market
        where market_status = 1 order by market_no desc
    </select>
 
    <!-- 인덱스에서 상품 리스트 보여주기 -->
    <select id="pList" resultType="com.solmarket.dto.ProductDTO">
        select product_name as productName, product_price as productPrice
        from product
    </select>
    
    <!-- 판매 상품 리스트 보여주기 -->
    <select id="sellList" resultType="com.solmarket.dto.ProductDTO">
        <![CDATA[
        select * from 
            (select rownum as num, statusList.* from
                (select user_name as userName, p.* from 
                    (select p.product_no as productNo, m.market_name as dummy,
                            p.user_no as userNo,
                            p.product_name as productName, 
                            p.product_price as productPrice,
                            p.product_content as productContent, 
                            p.product_date as productDate,
                            p.product_qn as productQN
                    from product p left outer join market m on p.market_no = m.market_no 
                    where p.user_no = #{userNo} and product_qn >= 1 and product_status = 3) p 
                left outer join myUser u on p.userNo = u.user_no) statusList
                where rownum <= (#{cri.pageNum} * #{cri.amount}))
            where num > (#{cri.pageNum} - 1) * #{cri.amount}
        ]]>
    </select>
 
    <!-- 판매 상품 리스트 페이징 -->
    <select id="sellTotal" resultType="int">
        select count(*) from product
        where user_no =#{userNo} and product_status = 3
    </select>
 
    <!-- 장터 종료 후 상품 리스트 보여주기 -->
    <select id="remainList" resultType="com.solmarket.dto.ProductDTO">
        <![CDATA[
        select * from 
            (select rownum as num, statusList.* from
                (select user_name as userName, p.* from 
                    (select p.product_no as productNo, m.market_name as dummy,
                            p.user_no as userNo,
                            p.product_name as productName, 
                            p.product_price as productPrice,
                            p.product_content as productContent, 
                            p.product_date as productDate,
                            p.product_qn as productQN
                    from product p left outer join market m on p.market_no = m.market_no 
                    where p.user_no = #{userNo} and product_qn >= 1 and product_status = 4) p 
                left outer join myUser u on p.userNo = u.user_no) statusList
                where rownum <= (#{cri.pageNum} * #{cri.amount}))
            where num > (#{cri.pageNum} - 1) * #{cri.amount}
        ]]>
    </select>
 
    <!-- 재고 상품 리스트 페이징 -->
    <select id="remainTotal" resultType="int">
        select count(*) from product
        where user_no =#{userNo} and product_status = 4
    </select>
    
    <!-- 온라인 상품 리스트 보여주기 -->
    <select id="onlineList" resultType="com.solmarket.dto.ProductDTO">
    <![CDATA[
        select * from 
            (select rownum as num, statusList.* from
                (select user_name as userName, p.* from 
                    (select p.product_no as productNo, m.market_name as dummy,
                            p.user_no as userNo,
                            p.product_name as productName, 
                            p.product_price as productPrice,
                            p.product_content as productContent, 
                            p.product_date as productDate,
                            p.product_qn as productQN
                    from product p left outer join market m on p.market_no = m.market_no 
                    where p.user_no = #{userNo} and product_qn >= 1 and product_status = 5) p 
                left outer join myUser u on p.userNo = u.user_no) statusList
                where rownum <= (#{cri.pageNum} * #{cri.amount}))
            where num > (#{cri.pageNum} - 1) * #{cri.amount}
        ]]>
    </select>
    
    <!-- 온라인 상품 페이징 처리 -->
    <select id="onlineTotal" resultType="int">
        select count(*) from product
        where user_no =#{userNo} and product_status = 5
    </select>
    
    <!-- 참여 중인 장터 리스트 보여주기 -->
    <select id="ingMarketList" resultType="com.solmarket.dto.MarketDTO">    
        <![CDATA[
        select num, marketNo, marketName,  marketSD,marketED,  marketLoc
        from (select /*+INDEX_DESC(market pk_market)*/
                 rownum as num, market_no as marketNo, market_name as marketName, market_sd as marketSD,market_ed as marketED, market_loc as marketLoc
             from market
             where rownum <= (#{cri.pageNum} * #{cri.amount}) and market_status = 2)
        where num > (#{cri.pageNum} - 1) * #{cri.amount}
        ]]>
    </select>
    
    <!-- 참여 중인 장터 리스트 페이징 -->
    <select id="ingMarketTotal" resultType="int">
        select count(*) from market
        where market_status = 2
    </select>    
    
    <!-- 상품 삭제 -->
    <delete id="delete">
        delete from product
        where product_no=#{productNo}
    </delete>
 
</mapper>
cs

 

 

<jsp>

1. 메인 페이지 [index.jsp]

  • 캐러셀을 통해 이미지 목록
  • 참여중인 장터 목록
  • 판매중인 상품 목록
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://www.springframework.org/security/tags" prefix="sec"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ include file="../include/product_header.jsp"%> 
<link
      rel="stylesheet"
      href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css"
      integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn"
      crossorigin="anonymous"
    />
  <style>  
     .carousel-inner > .item > img {
      top: 0;
      left: 0;
      min-width: 100%;
      min-height: 400px;
    
</style>
 
    <!-- content 시작 -->
    <div class="container-fluid">
        <!-- 현재 참여중인 장터 -->
        <div class="col-xl-12">
            <div class="card shadow mb-4">
                <div class="card-body">
                    <!-- header -->
                    <div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
                        <h6 class="m-0 font-weight-bold text-primary">오픈 예정 장터</h6>
                        <a href="/product/product_market_list">more</a>
                    </div>
                    <!-- body -->
                <div class="card-body">
                    <div class="panel-body">
                        <div id="carouselExampleCaptions" class="carousel slide" data-ride="carousel">
                            <ol class="carousel-indicators">
                                <li data-target="#carouselExampleCaptions" data-slide-to="0" class="active"></li>
                                <li data-target="#carouselExampleCaptions" data-slide-to="1"></li>
                                <li data-target="#carouselExampleCaptions" data-slide-to="2"></li>
                            </ol>
                            <div class="carousel-inner">
                                <c:forEach var="dto" items="${oList}" end="3"  varStatus="status">                                                    
                                    <div class='carousel-item <c:out value="${status.count == 1? 'active':''}"/>'>
                                        <img src="/ori_display/recruit/${dto.marketNo}" onerror="src='/resources/img/market.PNG'" class="d-block w-100" alt="..." width="1153" height="600"/>
                                        <div class="carousel-caption d-none d-md-block">
                                            <h5>${dto.marketName}</h5>
                                            <p>${dto.marketSD}</p>
                                        </div>
                                    </div>
                                </c:forEach>                                
                            </div>
                            <button class="carousel-control-prev" type="button" data-target="#carouselExampleCaptions" data-slide="prev">
                                <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                                <span class="sr-only">Previous</span>
                            </button>
                            <button class="carousel-control-next" type="button" data-target="#carouselExampleCaptions" data-slide="next">
                                <span class="carousel-control-next-icon" aria-hidden="true"></span>
                                <span class="sr-only">Next</span>
                            </button>
                        </div>
                    </div>
                </div>
            </div>
            </div>
        </div>
    
        <!-- row 안에 오픈 예정 장터, 상품 목록을 보여줌 -->
        <div class="row">
            <!-- 참여 예정 장터 start -->
            <div class="col-lg-6">
                <div class="card shadow mb-4">
                    <!-- header -->
                    <div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
                        <h6 class="m-0 font-weight-bold text-primary">참여 중인 장터</h6>
                        <a href="/product/product_ingmarket_list">more</a>
                    </div>
                    <!-- card body start -->
                    <div class="card-body" style="height:250px; overflow-y:scroll;">
                        <div class="panel-body">
                            <table class="table table-striped table-bordered table-hover">                                
                                <thead>
                                    <tr>
                                        <th>장터명</th>
                                        <th>장터 종료일</th>
                                        <th>장터 위치</th>
                                    </tr>
                                </thead>                                
                                <!-- tbody 시작 -->
                                <tbody>
                                    <!-- 리스트 반복문 -->
                                    <c:forEach var="dto" items="${mList}" end="4">
                                        <tr>
                                            <td>${dto.marketName}</td>
                                            <td>${dto.marketSD}</td>
                                            <td>${dto.marketLoc}</td>
                                        </tr>
                                    </c:forEach>
                                </tbody>
                            </table>    
                        </div><!-- <div class="panel-body"> end -->
                    </div><!-- card - body end -->
                </div>
            </div><!-- 오픈 예정 장터 end -->
            
 
            <!-- 상품 리스트 start-->
            <div class="col-lg-6">
                <div class="card shadow mb-4">
                    <!-- header -->
                    <div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
                        <h6 class="m-0 font-weight-bold text-primary">상품 목록</h6>
                        <a href="/product/product_list">more</a>
                    </div>
                    <!-- body -->
                    <div class="card-body" style="height:250px; overflow-y:scroll;">
                        <div class="panel-body">
                            <table class="table table-striped table-bordered table-hover">
                                <thead>
                                    <tr>
                                        <th>상품명</th>
                                        <th>상품가격</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <!-- 리스트 반복문 -->
                                    <c:forEach var="dto" items="${pList}" end="4">
                                        <tr>
                                            <td>${dto.productName}</td>
                                            <td>${dto.productPrice}</td>
                                        </tr>
                                    </c:forEach>
                                </tbody>
                            </table>
                        </div> <!-- <div class="panel-body"> 종료 -->
                    </div><!-- <div class="card-body"> 종료 -->
                </div>
            </div><!-- 상품 리스트 end -->
        </div> <!-- <div class="row"> 종료 -->
        
    </div> <!-- Content 종료 -->
<%@ include file="../include/manager_footer.jsp"%> 
cs

 

 

2. 오픈 예정 장터 리스트[market_list.jsp]

  • 아직 시작하지 않은 장터 목록을 보여줌
  • 장터명 클릭시 신청 폼 페이지로 연결
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://www.springframework.org/security/tags" prefix="sec"%>
<%@ include file="../include/product_header.jsp"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
 
    <!-- 페이지 제목 -->
    <div class="container" style="overflow-y:overlay;">
    <div class="row">
      <div class="col-lg-12 pl-2" >
        <h1 class="page-header">오픈 예정 장터 목록</h1>
      </div>
      <!-- /.col-lg-12 -->
    </div>
    <!-- /.row -->
 
 
    <div class="row">
      <div class="col-lg-12">
        <div class="panel panel-default">
          <div class="panel-heading">
          Market List Page
          </div>
         <!-- /.panel-heading 종료-->
      
      <div class="panel-body" style="height:80%;">
        <table class="table table-striped table-bordered table-hover">
          <thead>
            <tr>              
              <th>장터명</th>
              <td>장터 시작일</td>
              <td>장터 종료일</td>
              <td>장터 위치</td>
            </tr>
          </thead>
          <!-- thead 종료 -->
          
         <tbody>
          <!-- 게시판 리스트 반복문 -->
              <c:forEach var="dto" items="${marketList}" varStatus="status">
              <tr>                                    
                  <td>
                      <a href="${dto.marketNo}" class="move">${dto.marketName}</a>
                  </td>
                  <td>${dto.marketSD}</td>
                  <td>${dto.marketED}</td>
                  <td>${dto.marketLoc}</td>
              </tr>
              </c:forEach>
          </tbody>
         </table>
           
        <div class="row">
            <div class="col-md-2 col-md-offset-2">
              <!--페이지 목록 갯수 지정하는 폼-->
              <select name="" id="amount" class="form-control">
                  <option value="10" <c:out value="${cri.amount == 10? 'selected':''}"/>>10</option>
                  <option value="20" <c:out value="${cri.amount == 20? 'selected':''}"/>>20</option>
                  <option value="30" <c:out value="${cri.amount == 30? 'selected':''}"/>>30</option>
                  <option value="40" <c:out value="${cri.amount == 40? 'selected':''}"/>>40</option>
              </select>
            </div>
          </div>
          <!-- 페이지 목록 지정 종료 -->
         
       
       <!-- pagination start -->
        <nav aria-label="Page navigation example">
          <ul class="pagination row justify-content-center align-items-center"> <!-- row justify-content-center align-items-center : 가운데 정렬 -->
              <c:if test="${pageDto.prev}"> <!-- prev가 true여야 이전버튼 활성화 -->
                  <li class="paginate_button previous">
                  <a class="page-link" href="${pageDto.startPage-1}" aria-label="Previous">
                    <span aria-hidden="true">&laquo;</span>
                    <span class="sr-only">Previous</span>
                  </a>
                </li>
               </c:if>
              
            <c:forEach var="idx" begin="${pageDto.startPage}" end="${pageDto.endPage}">
                <!-- 활성화 중인 페이지 번호에 색으로 표시 -->
                <li class="page-item ${pageDto.cri.pageNum==idx?'active':''}"><a class="page-link" href="${idx}">${idx}</a></li>
            </c:forEach>
            
            <c:if test="${pageDto.next}">
                <li class="paginate_button next">
                  <a class="page-link" href="${pageDto.endPage+1}" aria-label="Next">
                    <span aria-hidden="true">&raquo;</span>
                    <span class="sr-only">Next</span>
                  </a>
                </li>
            </c:if>
          </ul>
        </nav>
        <!-- pagination close -->
       </div>
    <!-- /.panel-body  종료-->
    </div>
    <!-- panel panel-default 종료 -->
    </div>
    <!-- col-lg-12 종료 -->
</div>
 
    <%--페이지 링크 처리할 폼 --%>
    <form action="/product/product_market_list" id="actionForm">
        <!-- pageNum, amount, type, keyword 값을 부를 때
            ①pageDto(pageDto.cri.pageNum)
            ②cri(criteria.pageNum( @ModelAttribute가 사용 안된 경우), cri.pageNum)
             
          -->
        <input type="hidden" name="userNo" value="${user.userNo}" />
        <input type="hidden" name="pageNum" value="${cri.pageNum}" />
        <input type="hidden" name="amount" value="${cri.amount}" />
    </form>
 
</div>
       <!-- div class="panel-body" 종료 -->
 
<script src="/resources/js/product/product_market_list.js"></script>
<%@ include file="../include/manager_footer.jsp"%>
cs

 

 

3. 장터 참여 신청 및 상품 등록 [register.jsp]

  • 판매자와 장터 이름 자동 출력
  • 수량과 가격은 스크립트로 숫자만 입력 가능
  • 상품추가 후 등록 가능
  • 상품추가 최대 3개까지 가능
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://www.springframework.org/security/tags" prefix="sec"%>
<%@ include file="../include/product_header.jsp"%>
<script src="/resources/js/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/jquery.validate.js"></script>
 
 
<style>
   .custom-form{
   display: inline-block;
   margin-right: 50px;
   }
   .invisible{
      display:none;
   }
</style>
   <!-- content 시작 -->
   <div class="container">
   
      <div class="row">
         <div class="col-lg-12">
            <h2 class="page-header">장터 참여 신청 및 상품 등록</h2>
         </div>
      </div>
      
      <!-- form 시작 -->
      <div class="form-group">
         <form action="/product/product_register" method="post" role="form" id="productReg">
            <div class="form-group">
               <label>판매자</label>
               <input class="form-control" name="seller" value="${user.userName}" readonly>
            </div>
            
            <div class="form-group">
               <label>장터</label>
               <input class="form-control" name="market" value="${marketName}" readonly>
            </div>
   
            <div class="form-group">
               <div class="custom-form">
                  <label>상품 카테고리</label>
                  <select class="category1" name="categoryNo">
                     <option value="">----</option>
                     <option value="1">패션잡화</option>
                     <option value="2">의류</option>
                     <option value="3">푸드</option>
                     <option value="4">캔들/디퓨저/방향제</option>
                     <option value="5">문구/팬시</option>
                     <option value="6">향수/화장품/뷰티</option>
                     <option value="7">기타</option>
                  </select>
               </div>
   
               <div class="custom-form">
                  <label>상품 수량</label>                 
                  <input type="text" name="productQN" />
               </div>
               
            </div>
   
            <div class="form-group">
               <label>상품명</label>
               <input class="form-control" name="productName">
            </div>   
   
            <div class="form-group">
               <label>상품설명</label>
               <textarea class="form-control" rows="5" name="productContent" id="productContent" style="resize: none"></textarea>
            </div>
   
            <div class="form-group">
               <label>상품가격</label>
               <input type="text" name="productPrice" id="productPrice" class="form-control" />
            </div>
 
      </form> <!-- form 종료 -->
      </div>
         <!-- 파일 업로드 INPUT 카드 -->
         <div class="card mb-3" style="width: 100%;">
            <input type="file" name="uploadFile" class="custom-file-input form-control" id="customFileLangHTML" style="display:none" required>
            <label class="custom-file-label form-control" for="customFileLangHTML" data-browse="파일찾기"></label>
            <div class="card-body">
               <p class="card-title text-center">
                     <div class="card-text text-center pt-5 uploadResult">  
                     업로드 사진              
                      <ul class="showFileImg"> </ul>
                       </div> 
               </p>
            </div>                
          </div>
          
          
         
      <!-- form 시작  -->
      <div class="form-group">         
         <div class="row">
            <div class="col-lg-12">
               <!-- 상품 추가시 추가되는 테이블 -->               
               <table class="table table-bordered" style="display: none" >  <!--  -->
                  <thead>
                     <tr>
                         <th scope="col">이미지</th>
                        <th scope="col">카테고리</th>
                        <th scope="col">상품 수량</th>
                        <th scope="col">상품명</th>                           
                        <th scope="col"></th>
                     </tr>
                  </thead>
                  <tbody>
                     <!-- 스크립트 동작 -->
                  </tbody>
               </table>
            </div>
            <!--  -->
         </div>
         <!-- table 감싸기 종료-->
         <button type="button" class="btn btn-primary" id="addProductBtn">상품 추가</button>       
         <button type="submit" class="btn btn-warning" id="registerBtn">등록</button>
         <button type="button" class="btn btn-danger" id="deleteBtn">취소</button>      
   </div>
</div>
   <!-- content 종료 -->
   <!-- 실제로 데이터가 전송 될 폼 -->
   <form action="" id="registerForm" method="post">
      
   </form>
 
<script>
   // 등록 폼 전송 자료 
   // 변수 선언 해주기
   let userName = "${user.userName}";
   let marketName = "${marketName}";
   let marketNo = "${marketNo}";
   let userNo = "${user.userNo}";
   
   // 컨트롤러 하나를 가지고 섹션값 가지고오기
   let section = "product";
</script>
 
<script src="/resources/js/util/upload.js"></script>
<script src="/resources/js/product/product_register.js"></script>
<%@ include file="../include/manager_footer.jsp"%>
cs

 

 

4. 상품 목록 [list.jsp]

  • 판매자가 장터에 등록했던 상품들 보여주는 곳
  • 상품 상태 순으로 보여짐(판매완료 된 상품이 제일 뒤로)
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://www.springframework.org/security/tags" prefix="sec"%>
<%@ include file="../include/product_header.jsp"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
 
<!-- 페이지 제목 -->
<div class="container" style="overflow-y:overlay;">
    <div class="row">
        <div class="col-lg-12 pl-2">
            <h1 class="page-header">상품 목록</h1>
        </div>
        <!-- /.col-lg-12 -->
    </div>
    <!-- /.row -->
 
 
    <div class="row">
        <div class="col-lg-12">
            <div class="panel panel-default">
                <div class="panel-heading">Product List Page</div>
                <!-- /.panel-heading 종료-->
 
                <div class="panel-body" style="height:80%;" >
                    <table class="table table-striped table-bordered table-hover" style="text-align:center">
                        <thead>
                            <tr>
                                <th>판매장터</th>
                                <th>상품명</th>
                                <th>이미지</th>
                                <th>가 격</th>
                                <th>등록일</th>
                                <th>상품 상태</th>
                            </tr>
                        </thead>
                        <!-- thead 종료 -->
 
                        <tbody>
                            <!-- 게시판 리스트 반복문 -->
                            <c:forEach var="dto" items="${list}" varStatus="status">
                                <tr>
                                    <td class="align-middle">${dto.marketName}</td>
                                    <td class="align-middle"><a href="${dto.productNo}" class="move">${dto.productName}</a></td>
                                    <td><img src="/display/product/${dto.productNo}" onerror="src='https://via.placeholder.com/100'"/></td>
                                    <td class="align-middle">${dto.productPrice}</td>
                                    <td class="align-middle"><fmt:formatDate pattern="yyyy-MM-dd HH:mm" value="${dto.productDate}" /></td>
                                    <td class="align-middle">
                                    <%-- <td>${dto.productStatus}</td> --%>
                                    <c:choose>
                                    <c:when test="${dto.productStatus == 0}">                                    
                                     신청 완료(승인전)
                                    </c:when>
                                    <c:when test="${dto.productStatus == 1}">                                    
                                     신청 승인 완료
                                    </c:when>
                                    <c:when test="${dto.productStatus == 2}">                                    
                                     신청 승인 거부
                                    </c:when>
                                    <c:when test="${dto.productStatus == 3}">                                    
                                     장터 판매중
                                    </c:when>
                                    <c:when test="${dto.productStatus == 4}">                                    
                                     장터 판매 종료
                                    </c:when>
                                    <c:when test="${dto.productStatus == 5}">                                    
                                     온라인 판매 중
                                    </c:when>
                                    <c:when test="${dto.productStatus == 6}">                                    
                                     온라인 판매 종료
                                    </c:when>                                                                        
                                    </c:choose>
                                    </td>
                                </tr>
                            </c:forEach>
                        </tbody>
                    </table>
 
                    <div class="row">
                        <div class="col-md-2 col-md-offset-2">
                            <!--페이지 목록 갯수 지정하는 폼-->
                            <select name="perPage" id="amount" class="form-control">
                                <option value="10"
                                    <c:out value="${cri.amount == 10? 'selected':''}"/>>10</option>
                                <option value="20"
                                    <c:out value="${cri.amount == 20? 'selected':''}"/>>20</option>
                                <option value="30"
                                    <c:out value="${cri.amount == 30? 'selected':''}"/>>30</option>
                                <option value="40"
                                    <c:out value="${cri.amount == 40? 'selected':''}"/>>40</option>
                            </select>
                        </div>
                    </div>
                    <!-- 페이지 목록 지정 종료 -->
 
                    <!-- pagination start -->
                    <nav aria-label="Page navigation example">
                        <ul    class="pagination row justify-content-center align-items-center">
                            <!-- row justify-content-center align-items-center : 가운데 정렬 -->
                            <c:if test="${pageDto.prev}">
                                <!-- prev가 true여야 이전버튼 활성화 -->
                                <li class="paginate_button previous">
                                    <a class="page-link" href="${pageDto.startPage-1}" aria-label="Previous">
                                        <span aria-hidden="true">&laquo;</span>
                                        <span class="sr-only">Previous</span>
                                    </a>
                                </li>
                            </c:if>
 
                            <c:forEach var="idx" begin="${pageDto.startPage}" end="${pageDto.endPage}">
                                <!-- 활성화 중인 페이지 번호에 색으로 표시 -->
                                <li class="page-item ${pageDto.cri.pageNum==idx?'active':''}">
                                    <a class="page-link" href="${idx}">${idx}</a>
                                </li>
                            </c:forEach>
 
                            <c:if test="${pageDto.next}">
                                <li class="paginate_button next">
                                    <a class="page-link" href="${pageDto.endPage+1}" aria-label="Next">
                                        <span aria-hidden="true">&raquo;</span>
                                        <span class="sr-only">Next</span>
                                    </a>
                                </li>
                            </c:if>
                        </ul>
                    </nav>
                    <!-- pagination close -->
                </div>
                <!-- /.panel-body  종료-->
            </div>
            <!-- panel panel-default 종료 -->
        </div>
        <!-- col-lg-12 종료 -->
    </div>
 
    <%-- URL + 페이지 링크 처리할 폼 --%>
    <form action="/product/product_list" id="actionForm">
        <!-- pageNum, amount, type, keyword 값을 부를 때
            ①pageDto(pageDto.cri.pageNum)
            ②cri(criteria.pageNum( @ModelAttribute가 사용 안된 경우), cri.pageNum)
             
          -->
        <input type="hidden" name="userNo" value="${user.userNo}" />
        <input type="hidden" name="pageNum" value="${pageDto.cri.pageNum}" />
        <input type="hidden" name="amount" value="${pageDto.cri.amount}" />
    </form>
 
 
</div>
<!-- div class="panel-body" 종료 -->
 
<!-- 등록이 되면 성공 msg 띄우기    -->
<script>
    $(function(){
        let msg = "${msg}"
        if(msg != ""){
            
            alert(msg)
        }
    })
</script>
 
<script src="/resources/js/product/product_list.js"></script>
<%@ include file="../include/manager_footer.jsp"%>
cs

 

5. 판매 상품 목록 [sell_list.jsp]

  • 현재 장터에 판매 중인 상품 리스트
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://www.springframework.org/security/tags" prefix="sec"%>
<%@ include file="../include/product_header.jsp"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
 
<!-- 페이지 제목 -->
<div class="container" style="overflow-y:overlay;">
    <div class="row">
        <div class="col-lg-12 pl-2">
            <h1 class="page-header">판매 상품 목록</h1>
        </div>
        <!-- /.col-lg-12 -->
    </div>
    <!-- /.row -->
 
 
    <div class="row">
        <div class="col-lg-12">
            <div class="panel panel-default">
                <div class="panel-heading">
                Selling Product List Page
                </div>
                <!-- /.panel-heading 종료-->
 
                <div class="panel-body" style="height:80%;">
                    <table class="table table-striped table-bordered table-hover" style="text-align:center">
                        <thead>
                            <tr>
                                <th>상품명</th>
                                <th>이미지</th>
                                <th>가 격</th>
                                <th>수량 </th>                                
                            </tr>
                        </thead>
                        <!-- thead 종료 -->
                        <tbody>
                            <!-- 게시판 리스트 반복문 -->
                            <c:forEach var="dto" items="${sellList}">
                                <tr>
                                    <td class="align-middle"><a href="${dto.productNo}" class="move">${dto.productName}</a></td>                                    
                                    <td><img src="/display/product/${dto.productNo}" onerror="src='https://via.placeholder.com/100'"/></td>
                                    <td class="align-middle">${dto.productPrice}</td>
                                    <td class="align-middle">${dto.productQN}</td>
                                </tr>
                            </c:forEach>
                        </tbody>
                    </table>
 
                    <div class="row">
                        <div class="col-md-2 col-md-offset-2">
                            <!--페이지 목록 갯수 지정하는 폼-->
                            <select name="" id="amount" class="form-control">
                                <option value="10"
                                    <c:out value="${cri.amount == 10? 'selected':''}"/>>10</option>
                                <option value="20"
                                    <c:out value="${cri.amount == 20? 'selected':''}"/>>20</option>
                                <option value="30"
                                    <c:out value="${cri.amount == 30? 'selected':''}"/>>30</option>
                                <option value="40"
                                    <c:out value="${cri.amount == 40? 'selected':''}"/>>40</option>
                            </select>
                        </div>
                    </div>
                    <!-- 페이지 목록 지정 종료 -->
 
 
                    <!-- pagination start -->
                    <nav aria-label="Page navigation example">
                        <ul
                            class="pagination row justify-content-center align-items-center">
                            <!-- row justify-content-center align-items-center : 가운데 정렬 -->
                            <c:if test="${pageDto.prev}">
                                <!-- prev가 true여야 이전버튼 활성화 -->
                                <li class="paginate_button previous">
                                    <a class="page-link" href="${pageDto.startPage-1}" aria-label="Previous">
                                        <span aria-hidden="true">&laquo;</span>
                                        <span class="sr-only">Previous</span>
                                    </a>
                                </li>
                            </c:if>
 
                            <c:forEach var="idx" begin="${pageDto.startPage}" end="${pageDto.endPage}">
                                <!-- 활성화 중인 페이지 번호에 색으로 표시 -->
                                <li class="page-item ${pageDto.cri.pageNum==idx?'active':''}">
                                    <a class="page-link" href="${idx}">${idx}</a>
                                </li>
                            </c:forEach>
 
                            <c:if test="${pageDto.next}">
                                <li class="paginate_button next">
                                    <a class="page-link" href="${pageDto.endPage+1}" aria-label="Next">
                                        <span aria-hidden="true">&raquo;</span>
                                        <span class="sr-only">Next</span>
                                    </a>
                                </li>
                            </c:if>
                        </ul>
                    </nav>
                    <!-- pagination close -->
                </div>
                <!-- /.panel-body  종료-->
            </div>
            <!-- panel panel-default 종료 -->
        </div>
        <!-- col-lg-12 종료 -->
    </div>
 
    <%-- URL + 페이지 링크 처리할 폼 --%>
    <form action="/product/product_remain_list" id="actionForm">
        <!-- pageNum, amount, type, keyword 값을 부를 때
            ①pageDto(pageDto.cri.pageNum)
            ②cri(criteria.pageNum( @ModelAttribute가 사용 안된 경우), cri.pageNum)
             
          -->
        <input type="hidden" name="userNo" value="${user.userNo}" />
        <input type="hidden" name="pageNum" value="${pageDto.cri.pageNum}" />
        <input type="hidden" name="amount" value="${pageDto.cri.amount}" />
    </form>
 
</div>
<!-- div class="panel-body" 종료 -->
 
 
<script src="/resources/js/product/product_remain_list.js"></script>
<%@ include file="../include/manager_footer.jsp"%>
cs

 

6. 재고 상품 목록[remain_list.jsp]

  • 장터 종료 후 남은 상품 리스트
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://www.springframework.org/security/tags" prefix="sec"%>
<%@ include file="../include/product_header.jsp"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
 
<!-- 페이지 제목 -->
<div class="container" style="overflow-y:overlay;">
    <div class="row">
        <div class="col-lg-12 pl-2">
            <h1 class="page-header">재고 상품 목록</h1>
        </div>
        <!-- /.col-lg-12 -->
    </div>
    <!-- /.row -->
 
 
    <div class="row">
        <div class="col-lg-12">
            <div class="panel panel-default">
                <div class="panel-heading">
                List After Shop Listing Product List Page
                </div>
                <!-- /.panel-heading 종료-->
 
                <div class="panel-body" style="height:80%;">
                    <table class="table table-striped table-bordered table-hover" style="text-align:center">
                        <thead>
                            <tr>
                                <th>상품명</th>
                                <th>이미지</th>
                                <th>가 격</th>
                                <th>유효 기간 </th>
                                <th>수량 </th>                                
                            </tr>
                        </thead>
                        <!-- thead 종료 -->
                        <tbody>
                            <!-- 게시판 리스트 반복문 -->
                            <c:forEach var="dto" items="${remainList}">
                                <tr>
                                    <td class="align-middle"><a href="${dto.productNo}" class="move">${dto.productName}</a></td>                                    
                                    <td><img src="/display/product/${dto.productNo}" onerror="src='https://via.placeholder.com/100'"/></td>
                                    <td class="align-middle">${dto.productPrice}</td>
                                    <td class="align-middle"><fmt:formatDate pattern="yyyy-MM-dd HH:mm" value="${dto.productDate}" /></td>
                                    <td class="align-middle">${dto.productQN}</td>
                                </tr>
                            </c:forEach>
                        </tbody>
                    </table>
 
                    <div class="row">
                        <div class="col-md-2 col-md-offset-2">
                            <!--페이지 목록 갯수 지정하는 폼-->
                            <select name="" id="amount" class="form-control">
                                <option value="10"
                                    <c:out value="${cri.amount == 10? 'selected':''}"/>>10</option>
                                <option value="20"
                                    <c:out value="${cri.amount == 20? 'selected':''}"/>>20</option>
                                <option value="30"
                                    <c:out value="${cri.amount == 30? 'selected':''}"/>>30</option>
                                <option value="40"
                                    <c:out value="${cri.amount == 40? 'selected':''}"/>>40</option>
                            </select>
                        </div>
                    </div>
                    <!-- 페이지 목록 지정 종료 -->
 
 
                    <!-- pagination start -->
                    <nav aria-label="Page navigation example">
                        <ul
                            class="pagination row justify-content-center align-items-center">
                            <!-- row justify-content-center align-items-center : 가운데 정렬 -->
                            <c:if test="${pageDto.prev}">
                                <!-- prev가 true여야 이전버튼 활성화 -->
                                <li class="paginate_button previous">
                                    <a class="page-link" href="${pageDto.startPage-1}" aria-label="Previous">
                                        <span aria-hidden="true">&laquo;</span>
                                        <span class="sr-only">Previous</span>
                                    </a>
                                </li>
                            </c:if>
 
                            <c:forEach var="idx" begin="${pageDto.startPage}" end="${pageDto.endPage}">
                                <!-- 활성화 중인 페이지 번호에 색으로 표시 -->
                                <li class="page-item ${pageDto.cri.pageNum==idx?'active':''}">
                                    <a class="page-link" href="${idx}">${idx}</a>
                                </li>
                            </c:forEach>
 
                            <c:if test="${pageDto.next}">
                                <li class="paginate_button next">
                                    <a class="page-link" href="${pageDto.endPage+1}" aria-label="Next">
                                        <span aria-hidden="true">&raquo;</span>
                                        <span class="sr-only">Next</span>
                                    </a>
                                </li>
                            </c:if>
                        </ul>
                    </nav>
                    <!-- pagination close -->
                </div>
                <!-- /.panel-body  종료-->
            </div>
            <!-- panel panel-default 종료 -->
        </div>
        <!-- col-lg-12 종료 -->
    </div>
 
    <%-- URL + 페이지 링크 처리할 폼 --%>
    <form action="/product/product_remain_list" id="actionForm">
        <!-- pageNum, amount, type, keyword 값을 부를 때
            ①pageDto(pageDto.cri.pageNum)
            ②cri(criteria.pageNum( @ModelAttribute가 사용 안된 경우), cri.pageNum)
             
          -->
        <input type="hidden" name="userNo" value="${user.userNo}" />
        <input type="hidden" name="pageNum" value="${pageDto.cri.pageNum}" />
        <input type="hidden" name="amount" value="${pageDto.cri.amount}" />
    </form>
 
</div>
<!-- div class="panel-body" 종료 -->
 
 
<script src="/resources/js/product/product_remain_list.js"></script>
<%@ include file="../include/manager_footer.jsp"%>
cs

 

7. 상품 상세페이지[read.jsp]

  • 상품 리스트에서 상품명 클릭시 보여지는 페이지
  • 상품 상태가 4번(재고상품)이면 온라인 상품등록 버튼이 보여짐
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
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://www.springframework.org/security/tags" prefix="sec"%>
<%@ include file="../include/product_header.jsp"%>
<div class="container-fluid">
<!-- 상세페이지 -->
        <div class="form-group">
            <form action="" method="post" role="form">
                
                <div>
                    <img src="/ori_display/product/${dto.productNo}" class="rounded mx-auto d-block"/>
                </div>
                
                
                <div class="form-group"">
                        <label>상품명</label>
                        <input class="form-control" name="product" value="${dto.productName}"readonly>
                </div>
                
                <div class="form-group">
                  <label>상품 수량</label>                 
                  <input type="text" class="form-control" name="productQN" value="${dto.productQN}" readonly/>
               </div>
    
                <div class="form-group">
                    <label>상품설명</label>
                    <textarea class="form-control" rows="5" name="productcontent" style="resize: none" readonly>${dto.productContent}</textarea>
                </div>
    
                <div class="form-group">
                    <label>상품가격</label>
                    <input type="text" name="productprice" value="${dto.productPrice}" class="form-control" readonly />
                </div>
                
                
                    <div class="form-group">
                        <label>상품상태</label>
                        <input type="text" name="productStatus" id="productStatus" class="form-control" value="${dto.productStatus}" readonly />
                    </div>
                
            
                <button type="button" class="btn btn-info" id="registerBtn">목록</button>
                <c:if test="${dto.productStatus == 4}">
                    <button type="button" class="btn btn-primary" id="modifyBtn">온라인 상품 등록</button>
                </c:if>
            
        </form>
    </div>
</div>
<%-- 수정 버튼 클릭시 이동할 폼 --%>
<form action="/product/product_modify" id="operForm">
    <input type="hidden" value="${user.userNo}" name="userNo" />
    <input type="hidden" value="${dto.productNo}" name="productNo" />
    <input type="hidden" value="${pageNum}" name="pageNum" />
    <input type="hidden" value="${amount}" name="amount" />
</form>
<script src="/resources/js/util/upload.js"></script>
<script src="/resources/js/product/product_read.js"></script>
<%@ include file="../include/manager_footer.jsp"%>
cs

 

8. 온라인 상품 등록[modify.jsp]

 

 

 

9. 온라인 상품 목록[online_list.jsp]

  • 장터 종료 후 남은 상품을 온라인 상품으로 등록
  • 수량과 할인율 입력만 가능
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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://www.springframework.org/security/tags"
    prefix="sec"%>
<%@ include file="../include/product_header.jsp"%>
 
<div class="container-fluid" >
 
    <div class="row">
        <div class="col-lg-12">
            <h2 class="page-header">온라인 상품 등록</h2>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-12">
            <div class="panel panel-default">
                <div class="form-group">
                    <form action="" method="post" role="form">
 
                        <div>
                            <img src="/display/product/${dto.productNo}"
                                class="rounded mx-auto d-block" />
                        </div>
 
                        <div class="form-group">
                            <label>상품명</label> <input class="form-control" name="productName"
                                value="${dto.productName}" readonly>
                        </div>                        
 
                        <div class="form-group">
                            <label>상품 수량</label> <input type="text" name="productQN"
                                class="form-control" />
                        </div>
 
                        <div class="form-group">
                            <label>상품설명</label>
                            <textarea class="form-control" rows="5" name="productContent"
                                style="resize: none" readonly>${dto.productContent}</textarea>
                        </div>
 
                        <div class="form-group">
                            <label>상품가격</label> <input type="text" name="productPrice"
                                id="productPrice" class="form-control"
                                value="${dto.productPrice}" readonly />
                        </div>
 
                        <div class="form-group">
                            <label>할인율</label> <input type="text" name="productSale"
                                id="productSale" class="form-control" value="${dto.productSale}" />
                        </div>
 
 
 
                        <button type="submit" class="btn btn-primary" id="modifyBtn">등록</button>
                        <button type="button" class="btn btn-danger" id="deleteBtn">취소</button>
 
                        <input type="hidden" value="${dto.productNo}" name="productNo" />
                        <input type="hidden" value="${user.userNo}" name="userNo" />
                        <input type="hidden" value="${pageDto.pageNum}" name="pageNum" />
                        <input type="hidden" value="${pageDto.amount}" name="amount" />
 
                    </form>
                </div>
            </div>
        </div>
 
    </div>
    <!-- row 종료 -->
</div>
<!-- <div class="container-fluid"> 종료 -->
 
<script>
    $(function() {
        $(".btn-danger").click(function() {
            location.href = "/product/product_list";
        })
    })
</script>
 
<%@ include file="../include/manager_footer.jsp"%>
cs

 

10. header.jsp[product_header.jsp]

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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <!-- Font - googleapis -->
    <link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">
    <!-- Icon - fontawesome cdn -->
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css" integrity="sha384-DyZ88mC6Up2uqS4h/KRgHuoeGwBcD4Ng9SiP4dIRy0EXTlnuz47vAwmeGwVChigm" crossorigin="anonymous"/>
    <!-- Style -->
    <link href="/resources/css/sb-admin-2.min.css" rel="stylesheet">
    <script src="/resources/js/jquery.min.js"></script>
    <!-- 파일 업로드 css -->
    <link rel="stylesheet" href="/resources/css/upload.css" />
    <title>판매자 메인 페이지</title>
</head>
 
<body id="page-top">
 
    <!-- Page Wrapper -->
    <div id="wrapper">
 
        <!-- 사이드바 시작 -->
        <ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar">
 
            <!-- 사이드바 - 메인 -->
            <a class="sidebar-brand d-flex align-items-center justify-content-center" href="/product/product_index">
                <div class="sidebar-brand-icon">
                    <i class="fas fa-fw fa-cog"></i>
                </div>
                <div class="sidebar-brand-text mx-3">Market Seller</div>
            </a>
 
            <!-- 구분선 -->
            <hr class="sidebar-divider">
 
            <!-- 사이드바 - 홈페이지 메인으로 돌아가기 -->
            <li class="nav-item active">
                <a class="nav-link" href="/">
                    <i class="fas fa-fw fa-house-user"></i>
                    <span>쏠장터 메인</span>
                </a>
            </li>
 
            <!-- 구분선 -->
            <hr class="sidebar-divider">
            
            <!-- 사이드바 - 현재 오픈된 장터 정보 -->
            <li class="nav-item">
                <a class="nav-link" href="/product/product_market_list">
                    <i class="fas fa-fw fa-map-marker-alt"></i>
                    <span>현재 오픈 예정 장터</span>
                </a>
            </li>
 
             
             <!-- 사이드바 - 상품 관리 -->
             <li class="nav-item">
                 <a class="nav-link" href="/product/product_list">
                      <i class="fas fa-fw fa-folder"></i>
                      <span>상품 목록</span>
                 </a>
            </li>
            
             <!-- 사이드바 : 마켓에서 판매 중인 상품 리스트 -->
            <li class="nav-item">
                 <a class="nav-link" href="/product/product_sell_list">
                      <i class="fas fa-fw fa-folder"></i>
                      <span>판매 상품 목록</span>
                 </a>
            </li>
            
            <!-- 사이드바 : 마켓 종료 후 남은 상품 리스트 -->
            <li class="nav-item">
                 <a class="nav-link" href="/product/product_remain_list">
                      <i class="fas fa-fw fa-folder"></i>
                      <span>재고 상품 목록</span>
                 </a>
            </li>
            <!-- 사이드바 : 온라인 상품 리스트 -->
              <li class="nav-item">
                 <a class="nav-link" href="/product/product_online_list">
                      <i class="fas fa-fw fa-folder"></i>
                      <span>온라인 상품 목록</span>
                 </a>
            </li>
 
            
        </ul>
        <!-- 사이드바 종료 -->
 
        <!-- Content Wrapper -->
        <div id="content-wrapper" class="d-flex flex-column">
 
            <!-- Main Content -->
            <div id="content">
 
                <!-- 상단바 -->
                <nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow">
 
                    <!-- 상단바 메뉴 -->
                    <ul class="navbar-nav ml-auto">
 
                        <!-- 상단바 - 알림 -->
                        <li class="nav-item dropdown no-arrow mx-1">
                            <a class="nav-link" href="#">
                                <i class="fas fa-fw fa-bell"></i>
                                <!-- 알림 개수 표시 -->
                                <span class="badge badge-danger badge-counter">5+</span>
                            </a>
                        </li>
 
                        <!-- 상단바 - 쪽지 -->
                        <li class="nav-item dropdown no-arrow mx-1">
                            <a class="nav-link" href="#">
                                <i class="fas fa-envelope fa-fw"></i>
                                <!-- 쪽지 개수 표시 -->
                                <span class="badge badge-danger badge-counter">10</span>
                            </a>
                        </li>
 
                        <!-- 구분선 -->
                        <div class="topbar-divider d-none d-sm-block"></div>
 
                       <!-- 상단바 - 프로필 -->
                        <li class="nav-item dropdown no-arrow">
                            <a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                <span class="mr-2 d-none d-lg-inline text-gray-600 small">SELLER</span>
                                <i class="fas fa-fw fa-user"></i>
                            </a>
                            <!-- 프로필 드롭다운 -->
                            <div class="dropdown-menu dropdown-menu-right shadow animated--grow-in" aria-labelledby="userDropdown">
                                <a class="dropdown-item" href="/member/myPagePwCheck">
                                    <i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400"></i>
                                    마이페이지
                                </a>
                                <div class="dropdown-divider"></div>
                                <a class="dropdown-item" href="/member/logout" >
                                    <i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i>                                    
                                    로그아웃
                                </a>
                            </div>
                        </li>
                                <!-- 마이페이지로 돌아가기 -->
                                <!-- 로그아웃 -->
                        
                    </ul>
 
                </nav>
                <!-- 상단바 종료 -->            
           
cs

 

11. footer.jsp [manage_footer.jsp]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            <footer class="sticky-footer bg-white">
                <div class="container my-auto">
                    <div class="copyright text-center my-auto">
                        <span>Copyright &copy; SolMarket 2022</span>
                    </div>
                </div>
            </footer>
            <!-- End of Footer -->
 
        </div>
        <!-- End of Content Wrapper -->
 
    </div>
    <!-- End of Page Wrapper -->
 
<script src="/resources/js/bootstrap.bundle.min.js"></script>
<script src="/resources/js/sb-admin-2.min.js"></script>
<script src="/resources/js/market_pagination.js"></script>
</body>
</html>
cs

<js>

1. 오픈 예정 장터 리스트[product_market_list.js]

  • 페이징 처리
  • 보여지는 개수 변화에 따른 페이지 이동 처리
  • 장터명 클릭시 등록폼으로 전송
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
$(function() {
    
    //페이지 이동 버튼 클릭
    let actionForm = $("#actionForm");
    $(".page-item a").click(function(e) {
        e.preventDefault();   // a 속성 중지
 
        //사용자가 선택한 페이지 번호 가져오기
        let pageNum = $(this).attr('href');
        //가져온 번호를 actionForm 안의 pageNum 값으로 대체
        actionForm.find("[name='pageNum']").val(pageNum);
        //actionForm 보내기
        actionForm.submit();
 
    })
 
    //페이지 목록 개수가 클릭
    $(".form-control").change(function() {
 
        //actionForm 안의 amount 값을 변경하기
        actionForm.find("[name='amount']").val($(this).val());
 
        // amount 값을 변경하면 1페이지로 보내기
        actionForm.find("[name='pageNum']").val(1);
 
        //actionForm 보내기
        actionForm.submit();
 
    })
    
    // 장터 이름 타이틀 클릭시
    $(".move").click(function(e){
        e.preventDefault(); //a 태그 기능 중지
        
        //a가 가지고 있는 href 가지고 오기
        let href = $(this).attr("href");        
        
        //actionForm 안에 bno 태그를 추가하기(bno 값은 href가 가지고 있는 값으로)
        //내용 보기에 들어갔을 때 사용자가 리스트 버튼이 아닌 뒤로 가기 버튼을 눌러서
        //목록으로 돌아올때 bno가 계속 추가되는 것 방지
        if(actionForm.find("[name='marketNo']").length != 0){
            
            actionForm.find("[name='marketNo']").val(href);
        
        }else{
        
            actionForm.append("<input type ='hidden' name ='marketNo' value='" +href+ "'>");            
        
        }
        
        //actionForm action 변경
        actionForm.attr("action","/product/product_register");
        
        //actionForm 보내기
        actionForm.submit();
    })
 
})
cs

 

2. 상품등록 [product_register.js]

  • 상품 3개까지만 등록
  • 동적 테이블
  • 상품 추가 버튼 클릭시 테이블 생성
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/**
 상품 등록 스크립트
 상품 2개 이상 추가 시 사용
 */
$(function(){    
    // 데이터 전송 될 폼 불러오기
    let registerForm = $("#registerForm");    
    
    // 3개 한도 정하기    
    let index = 0;    
    
    //상품 추가 버튼 클릭시 
    $("#addProductBtn").click(function(){
        
        //table 태그에 값 가져온거 보여주기 ==> tbody안에 넣기
        let table = $("table");        
        let tbody = table.find("tbody");
        
        // 상품 추가 시 index 값 ++
        // 한번에 입력 3개까지 가능
        if(index < 3){
            //register.jsp에서 값 가지고 오기            
            // 카테고리
            let category = $("select").val();
            // 상품수량
            let qn = $("input[name='productQN']").val();    
            // 상품명 
            let productName = $("input[name='productName']").val();
            // 상품 설명 : textarea
            let productContent = $("#productContent").val();
            // 상품 가격
            let productPrice = $("input[name='productPrice']").val();            
            
            // 비어있는란이 있다면 경고창 띄워주기
            if(category  == ''){
                alert("카테고리을 선택해주세요");
                return;
            }
            if(qn  == ''){
                alert("수량을 입력해주세요");
                return;
            }
            if(!/^[0-9]+/.test(qn)){
                alert("숫자만 입력해주세요");
                return 
            } 
            if(productName  == ''){
                alert("상품명을 입력해주세요");
                return;
            }
            if(productContent  == ''){
                alert("상품 설명을 입력해주세요");
                return;
            }
            if(productPrice  == ''){
                alert("상품 가격을 입력해주세요");
                return;
            }
            if(!/^[0-9]+/.test(productPrice)){
                alert("숫자만 입력해주세요");
                return 
            }
            
            table.css("display","table");    
            
            str = ""
            console.log(fileData)
            str +="<tr><td><img src='/display/product?fileName=" + fileCallPath + "'/></td>";
            str +="<td>"+ category + "</td>";
            str += "<td>" + qn +"</td>";
            str += "<td>" + productName + "</td>";
            str += "<td class='invisible'>" + productContent +"</td>";
            str += "<td class='invisible'>" + productPrice +"</td>";
            //이미지 등록
            str += "<td class='invisible file-data' data-path='" + fileData[0].uploadPath + "' data-uuid='" + fileData[0].uuid + "' data-filename='" + fileData[0].fileName + "' data-target='"+ fileCallPath +"'></td>";
            str += "<td><button type='button' id='removeBtn'>X</button></td></tr>";
            table.find("tbody").append(str);
            
            // 상품 추가 버튼 클릭시 페이지 정보 지워주기
            // 카테고리
            $("select").val("");
            //상품수량
            $("input[name='productQN']").val("");    
            //상품명 
            $("input[name='productName']").val("");
            //상품 설명
            $("#productContent").val("");
            //상품 가격
            $("input[name='productPrice']").val("");
            // 업로드 사진
            $("input[name='uploadFile']").val("");
            //label 
            $(".custom-file-label").html("")
            $(".showFileImg").html("")
                
        }else{
            return
        }
        index++;        
    })
    
    //등록 버튼
    $(".btn-warning").click(function(e){
        e.preventDefault();
        
        //registerForm 추가 - 테이블 내용 수집        
        $("table > tbody > tr").each(function(idx, td){
            
            var tr = $(this);    
            
            var categoryNo = tr.find("td").eq(1).html();   
            var productQN = tr.find("td").eq(2).text();
            var productName = tr.find("td").eq(3).text();
            var productContent = tr.find("td").eq(4).text();
            var productPrice = tr.find("td").eq(5).text();
            // 이미지 등록 
            var fileD = tr.find("td").eq(6);
            
            var uuid = fileD.data("uuid");
            var path = fileD.data("path");
            var filename = fileD.data("filename");
            
            console.log(categoryNo,productQN,productName,productContent,productPrice);
            
            let data = "";
            data += "<input type='hidden' name='proList["+idx+"].marketNo' value='" + marketNo + "'/>";
            data += "<input type='hidden' name='proList["+idx+"].userNo' value='" + userNo + "'/>";            
            data += "<input type='hidden' name='proList["+idx+"].categoryNo' value='" + categoryNo + "'/>";
            data += "<input type='hidden' name='proList["+idx+"].productQN' value='" + productQN + "'/>";
            data += "<input type='hidden' name='proList["+idx+"].productName' value='" + productName + "'/>";
            data += "<input type='hidden' name='proList["+idx+"].productContent' value='" + productContent + "'/>";
            data += "<input type='hidden' name='proList["+idx+"].productPrice' value='" + productPrice + "'/>";    
            
            data += '<input type="hidden" name="proList['+idx+'].attach.uuid" value="' + uuid + '" />';
            data += '<input type="hidden" name="proList['+idx+'].attach.uploadPath" value="' + path + '" />';
            data += '<input type="hidden" name="proList['+idx+'].attach.fileName" value="' + filename + '" />';
                       
            registerForm.append(data);    
        })
                
        //추가된 상품 확인
        console.log(registerForm.html());
        registerForm.attr('action''/product/product_register')
        
        //registerForm 전송
        registerForm.submit();        
    })
        
    // 스크립트 동작 후 tbody안에 값이 생성 되면 버튼 기능 활성화.(x버튼)
    $("tbody").on("click","#removeBtn",function(){                
        // 파일 사진 삭제
        var img = $(this).closest("tr").find(".file-data")
        
        let target = img.data("target");
        let type = $(this).data("type");
        
        $.ajax({
            url:'/deleteFile/product',
            data:{
                fileName: target,
                type:type
            },
            type:'post',
            success:function(result) {
                console.log(result)
            }
        })
        
        // 상품추가 클릭시 보여지는 테이블 관련 삭제
        // console.log($(this).closest("tr"))
        $(this).closest("tr").remove();
        index --;
        let table = $("table");        
        if(index < 1 ){
            table.css("display","none");
        }
    })
 
    //취소 버튼 클릭시
    $(".btn-danger").click(function() {
        location.href = "/product/product_list";
    })    
    
})
 
cs

 

3. 참여중인 장터 리스트 페이징 [ingmarket_list.js]

  • product_ingmarket_list.jsp 페이징 처리 스크립트
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
$(function() {
 
    //페이지 이동 버튼 클릭
    let actionForm = $("#actionForm");
    $(".page-item a").click(function(e) {
        e.preventDefault();   // a 속성 중지
 
        //사용자가 선택한 페이지 번호 가져오기
        let pageNum = $(this).attr('href');
        //가져온 번호를 actionForm 안의 pageNum 값으로 대체
        actionForm.find("[name='pageNum']").val(pageNum);
        //actionForm 보내기
        actionForm.submit();
 
    })
 
    //페이지 목록 개수가 클릭
    $(".form-control").change(function() {
 
        //actionForm 안의 amount 값을 변경하기
        actionForm.find("[name='amount']").val($(this).val());
 
        // amount 값을 변경하면 1페이지로 보내기
        actionForm.find("[name='pageNum']").val(1);
 
        //actionForm 보내기
        actionForm.submit();
 
    })
 
})
cs
 

 

4. 상품 목록 리스트[product_list.js]

  • 페이징 처리
  • 목록 리스트 10, 20, 30, 40 변경시 다시 1번부터 보여지기
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
$(function(){
        
    //페이지 이동 버튼 클릭
    //actionForm 가져오기
    let actionForm = $("#actionForm");
    
    $(".page-item a").click(function(e){
        e.preventDefault(); //a속성 중지
        
        //productNo가 있는 경우 제거
        actionForm.find("[name='productNo']").remove();
        
        //action 수정
        actionForm.attr("action","/product/product_list");
            
        //사용자가 선택한 페이지 번호 가져오기
        let pageNum = $(this).attr('href');
        
        //가져온 번호를 actionForm 안의 pageNum 값으로 대체
        actionForm.find("[name='pageNum']").val(pageNum);        
        
        //actionForm 보내기
        actionForm.submit();
        
    })
    
    //페이지 목록 개수가 클릭
    $(".form-control").change(function(){
        
    //actionForm 안의 amount 값을 변경하기
    actionForm.find("[name='amount']").val($(this).val());    
    
    // amount 값을 변경하면 1페이지로 보내기
    actionForm.find("[name='pageNum']").val(1);        
 
    //actionForm 보내기
    actionForm.submit();
    
    })
    
    //타이틀 클릭시
    $(".move").click(function(e){
        e.preventDefault(); //a 태그 기능 중지
        
        //a가 가지고 있는 href 가지고 오기
        let href = $(this).attr("href");        
        
        //actionForm 안에 
        if(actionForm.find("[name='productNo']").length != 0){
            
            actionForm.find("[name='productNo']").val(href);
        
        }else{
        
            actionForm.append("<input type ='hidden' name ='productNo' value='" +href+ "'>");            
        
        }
        
        //actionForm action 변경(/product/product_read)
        actionForm.attr("action","/product/product_read");
        
        //actionForm 보내기
        actionForm.submit();
    })
    
})
cs

 

5. 재고상품 리스트[product_remain_list.js]

  • 페이징 처리
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
$(function(){
        
    //페이지 이동 버튼 클릭
    //actionForm 가져오기
    let actionForm = $("#actionForm");
    
    $(".page-item a").click(function(e){
        e.preventDefault(); //a속성 중지
        
        //productNo가 있는 경우 제거
        actionForm.find("[name='productNo']").remove();
        
        //action 수정
        actionForm.attr("action","/product/product_remain_list");
            
        //사용자가 선택한 페이지 번호 가져오기
        let pageNum = $(this).attr('href');
        
        //가져온 번호를 actionForm 안의 pageNum 값으로 대체
        actionForm.find("[name='pageNum']").val(pageNum);
        
        //actionForm 보내기
        actionForm.submit();
        
    })//paginate_button종료
    
    //페이지 목록 개수가 클릭
    $(".form-control").change(function(){
        
    //actionForm 안의 amount 값을 변경하기
    actionForm.find("[name='amount']").val($(this).val());    
    // amount 값을 변경하면 1페이지로 보내기
    actionForm.find("[name='pageNum']").val(1);        
 
    //actionForm 보내기
    actionForm.submit();
    
    })
    
    //타이틀 클릭시
    $(".move").click(function(e){
        e.preventDefault(); //a 태그 기능 중지
        
        //a가 가지고 있는 href 가지고 오기
        let href = $(this).attr("href");        
        
        //actionForm 안에
        if(actionForm.find("[name='productNo']").length != 0){
            
            actionForm.find("[name='productNo']").val(href);
        
        }else{
        
            actionForm.append("<input type ='hidden' name ='productNo' value='" +href+ "'>");            
        
        }
        
        //actionForm action 변경(/product/product_read)
        actionForm.attr("action","/product/product_read");
        
        //actionForm 보내기
        actionForm.submit();
    })    
 
})
cs

 

6. 상품 상세페이지 [read.jsp]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$(function(){
    //read.jsp에서 operForm 가져오기
    let operForm = $("#operForm");
    
    // 목록버튼 클릭시 실행
    $(".btn-info").click(function(){
                
        // attr() :  operForm에 있는 속성을 변경
        // 읽어올 때 attr("속성명") 
        // attr("속성명", "변경값");
        operForm.attr("action""/product/product_list");
        
        // 버튼을 클릭하면 attr에 준 값으로 보냄.
        // controller로 이동
        operForm.submit();
    })
    
    //modify 버튼 클릭시 operForm 지정해놓은 modify로 이동
    $(".btn-primary").click(function(){
        // form에서 지정한 action url로 데이터 보냄.
        operForm.submit();
    }}
})
cs

 

프로젝트 아쉬운 점
1. 세부적인 기능추가를 못한것
2. 할인율 입력은 가능하지만 반영이 안됨

 

 
Comments