728x90
첨부파일이 있는 글 수정은 다른 컬럼들처럼 value 값으로 불러올 수가 없어서 조금의 생각이 더 필요했다.
내가 2차 프로젝트에서 어떻게 해결했는지 적어보도록 하겠다.
// 알바게시판 수정
@RequestMapping(value = "job_update", method = RequestMethod.POST)
public String job_update(@RequestParam(name = "images") MultipartFile[] mf, int job_no, Job job, Member member, HttpServletRequest request,
HttpSession session, Model model) throws Exception {
for(MultipartFile MultipartFile : mf) {
System.out.println("컨트롤러 받은 이미지: " + MultipartFile);
}
// 첨부파일 갯수가 3개 넘어갈 때
if(mf.length > 3) {
model.addAttribute("result", 1);
return "goods/uploadResult";
}
// 이미지 업로드
// goods 불러오면 확장자 뒤에 ,가 붙기 때문에 substring 써서 잘라주기
String tmp_upload = goodsService.image_upload(mf, request);
String upload_result = tmp_upload.substring(0, tmp_upload.length()-1);
// 첨부파일 사이즈가 클 때
if(upload_result.equals("FileSizeOver")) {
model.addAttribute("result", 2);
return "goods/uploadResult";
// 파일 확장자가 다를 때
}else if(upload_result.equals("FileNotMatch")) {
model.addAttribute("result", 3);
return "goods/uploadResult";
}
// 세션에 저장된 member_no을 job 객체 member_no에 저장
job.setMember_no((int)session.getAttribute("member_no"));
System.out.println("session에 저장된 member_no :" + job.getMember_no());
Job original_job = jobService.get_all_job(job_no);
// 첨부파일 수정 시
if(upload_result.length() > 0) {
job.setJob_image(upload_result);
System.out.println("첨부파일 수정시 이미지 값: " + upload_result);
// 첨부파일 미수정 시
}else {
job.setJob_image(original_job.getJob_image());
System.out.println("미수정시 db에서 가져온 이미지 값: " + job.getJob_image());
}
int result = jobService.job_update(job);
System.out.println("result: " + result);
model.addAttribute("result", result);
return "job/job_update_result";
}
JobController.java
등록 폼에서 required를 써서 빈칸으로 냅두면 안 되도록 했지만 수정 폼에서는 required를 뺐다.
글 등록 때와는 달리 job_no을 매개변수로 DB에서 job 테이블의 모든 정보를 불러와 이미지 값을 사용하는 것이다.
upload_result의 길이가 0을 넘는다는 건 첨부파일을 첨부했다는 의미이므로 수정한다는 의미다.
그러므로 첨부파일 수정 시에는 사용자가 폼에서 등록한 값으로 update를 해주면 되고,
첨부파일 미수정 시에는 DB에서 가져온 이미지 값을 넣어서 update를 진행해주면 된다.
public int job_update(Job job) {
return jobDao.job_update(job);
}
JobService.java
int job_update(Job job);
JobDao.java
인터페이스인 dao는 따로 daoImpl를 거치지 않고, 바로 마이바티스와 매핑된다.
<!-- 글 수정 -->
<update id="job_update" parameterType="job">
update job set
job_title = #{job_title},
job_content = #{job_content},
job_price = #{job_price},
job_place = #{job_place},
job_time1 = #{job_time1},
job_time2 = #{job_time2},
job_day = #{job_day},
job_image = #{job_image}
where job_no = #{job_no}
</update>
job.xml
mysql의 update 쿼리문이다. 그럼 완성 !
728x90
'Back-End > Spring' 카테고리의 다른 글
HTTP 요청 메시지 - JSON (0) | 2024.01.18 |
---|---|
HTTP 요청 파라미터 - @RequestParam, @ModelAttribute (0) | 2024.01.17 |
페이징과 리스트 (0) | 2023.12.25 |
Spring - Spring MVC (0) | 2023.12.22 |