diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/controller/CrdnActInfoController.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/controller/CrdnActInfoController.java index e9e052d..6029d06 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/controller/CrdnActInfoController.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/controller/CrdnActInfoController.java @@ -111,14 +111,14 @@ public class CrdnActInfoController { // 수정 모드인 경우 기존 데이터 및 사진 목록 조회 if ("U".equals(mode) && actInfoId != null) { data = service.selectActInfoByPk(actInfoId); - // 중요한 로직 주석: 수정 모드에서 기존 등록된 사진 목록을 조회하여 화면에 표시한다. + // 중요한 로직 주석: 수정 모드에서 기존 등록된 모든 사진 목록(단속+조치)을 조회하여 화면에 표시한다. photoList = photoService.selectPhotoListByActInfoIdAndPhotoSeCd( - CrdnPhotoVO.builder().actInfoId(actInfoId).crdnPhotoSeCd("1").build()); + CrdnPhotoVO.builder().actInfoId(actInfoId).build()); // 사진구분코드 없이 전체 조회 } ModelAndView mav = new ModelAndView("crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup" + TilesConstants.POPUP); mav.addObject("data", data); - mav.addObject("photoList", photoList); + mav.addObject("crdnPhotoList", photoList); // 변수명을 JSP에서 사용하는 crdnPhotoList로 변경 mav.addObject("mode", mode); mav.addObject("crdnYr", crdnYr); mav.addObject("crdnNo", crdnNo); @@ -213,13 +213,13 @@ public class CrdnActInfoController { /** * 불법위반행위정보 등록 (파일 포함 가능, AJAX) - * 중요한 로직 주석: 행위정보 등록과 함께 사진 파일도 처리한다. 모든 로직은 service 단에서 한 트랜잭션으로 처리된다. + * 중요한 로직 주석: 행위정보 등록과 함께 단속/조치 사진 파일도 처리한다. 모든 로직은 service 단에서 한 트랜잭션으로 처리된다. * @param vo 등록할 불법위반행위정보 - * @param photoFiles 업로드할 사진 파일 목록 (선택사항) - * @param crdnPhotoSeCd 사진 구분 코드 + * @param crdnPhotoFiles 업로드할 단속 사진 파일 목록 (선택사항) + * @param actnPhotoFiles 업로드할 조치 사진 파일 목록 (선택사항) * @return 등록 결과 */ - @Operation(summary = "불법위반행위정보 등록", description = "불법위반행위정보를 등록합니다. 사진 파일도 함께 처리 가능합니다.") + @Operation(summary = "불법위반행위정보 등록", description = "불법위반행위정보를 등록합니다. 단속/조치 사진 파일도 함께 처리 가능합니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "등록 성공"), @ApiResponse(responseCode = "500", description = "서버 오류") @@ -227,11 +227,12 @@ public class CrdnActInfoController { @PostMapping("/insert.ajax") public ResponseEntity insertAjax( @ModelAttribute CrdnActInfoVO vo, - @RequestParam(value = "photoFiles", required = false) List photoFiles, - @RequestParam(value = "crdnPhotoSeCd", required = false) String crdnPhotoSeCd) { - - log.debug("불법위반행위정보 등록 요청: {}, 파일 개수: {}", vo, - photoFiles != null ? photoFiles.size() : 0); + @RequestParam(value = "crdnPhotoFiles", required = false) List crdnPhotoFiles, + @RequestParam(value = "actnPhotoFiles", required = false) List actnPhotoFiles) { + + log.debug("불법위반행위정보 등록 요청: {}, 단속 사진 개수: {}, 조치 사진 개수: {}", + vo, crdnPhotoFiles != null ? crdnPhotoFiles.size() : 0, + actnPhotoFiles != null ? actnPhotoFiles.size() : 0); CrdnRegistAndViewVO crdnVO = new CrdnRegistAndViewVO(); @@ -243,8 +244,8 @@ public class CrdnActInfoController { vo.setRgtr(SessionUtil.getUserId()); vo.setMdfr(SessionUtil.getUserId()); - // 중요한 로직 주석: service 단에서 행위정보 등록과 사진 파일 처리를 한 트랜잭션으로 처리 - int result = service.insertActInfoWithFiles(vo, photoFiles, crdnPhotoSeCd); + // 중요한 로직 주석: service 단에서 행위정보 등록과 단속/조치 사진 파일 처리를 한 트랜잭션으로 처리 + int result = service.insertActInfoWithFiles(vo, crdnPhotoFiles, actnPhotoFiles); if (result > 0) { return ApiResponseUtil.success(MessageConstants.Common.SAVE_SUCCESS); @@ -256,13 +257,13 @@ public class CrdnActInfoController { /** * 불법위반행위정보 수정 (파일 포함 가능, AJAX) - * 중요한 로직 주석: 행위정보 수정과 함께 사진 파일도 처리한다. 모든 로직은 service 단에서 한 트랜잭션으로 처리된다. + * 중요한 로직 주석: 행위정보 수정과 함께 단속/조치 사진 파일도 처리한다. 모든 로직은 service 단에서 한 트랜잭션으로 처리된다. * @param vo 수정할 불법위반행위정보 - * @param photoFiles 업로드할 사진 파일 목록 (선택사항) - * @param crdnPhotoSeCd 사진 구분 코드 + * @param crdnPhotoFiles 업로드할 단속 사진 파일 목록 (선택사항) + * @param actnPhotoFiles 업로드할 조치 사진 파일 목록 (선택사항) * @return 수정 결과 */ - @Operation(summary = "불법위반행위정보 수정", description = "불법위반행위정보를 수정합니다. 사진 파일도 함께 처리 가능합니다.") + @Operation(summary = "불법위반행위정보 수정", description = "불법위반행위정보를 수정합니다. 단속/조치 사진 파일도 함께 처리 가능합니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "수정 성공"), @ApiResponse(responseCode = "500", description = "서버 오류") @@ -270,17 +271,18 @@ public class CrdnActInfoController { @PostMapping("/update.ajax") public ResponseEntity updateAjax( @ModelAttribute CrdnActInfoVO vo, - @RequestParam(value = "photoFiles", required = false) List photoFiles, - @RequestParam(value = "crdnPhotoSeCd", required = false) String crdnPhotoSeCd) { - - log.debug("불법위반행위정보 수정 요청: {}, 파일 개수: {}", vo, - photoFiles != null ? photoFiles.size() : 0); + @RequestParam(value = "crdnPhotoFiles", required = false) List crdnPhotoFiles, + @RequestParam(value = "actnPhotoFiles", required = false) List actnPhotoFiles) { + + log.debug("불법위반행위정보 수정 요청: {}, 단속 사진 개수: {}, 조치 사진 개수: {}", + vo, crdnPhotoFiles != null ? crdnPhotoFiles.size() : 0, + actnPhotoFiles != null ? actnPhotoFiles.size() : 0); vo.setMdfr(SessionUtil.getUserId()); vo.setSggCd(SessionUtil.getSessionVO().getUser().getOrgCd()); // 업데이트 화면에서 신규파일 등록 시 필요 - // 중요한 로직 주석: service 단에서 행위정보 수정과 사진 파일 처리를 한 트랜잭션으로 처리 - int result = service.updateActInfoWithFiles(vo, photoFiles, crdnPhotoSeCd); + // 중요한 로직 주석: service 단에서 행위정보 수정과 단속/조치 사진 파일 처리를 한 트랜잭션으로 처리 + int result = service.updateActInfoWithFiles(vo, crdnPhotoFiles, actnPhotoFiles); if (result > 0) { return ApiResponseUtil.success(MessageConstants.Common.SAVE_SUCCESS); @@ -324,14 +326,15 @@ public class CrdnActInfoController { public String photoView( @Parameter(description = "행위정보ID") @RequestParam String actInfoId, @Parameter(description = "사진순번") @RequestParam String crdnPhotoSn, + @Parameter(description = "단속조치사진구분") @RequestParam String crdnPhotoSeCd, Model model) { - log.debug("단속 사진 보기 요청 - actInfoId: {}, crdnPhotoSn: {}", actInfoId, crdnPhotoSn); + log.debug("단속 사진 보기 요청 - actInfoId: {}, crdnPhotoSn: {}, crdnPhotoSeCd: {}", actInfoId, crdnPhotoSn, crdnPhotoSeCd); // 중요한 로직 주석: 해당 행위정보의 모든 사진 목록 조회 CrdnPhotoVO searchVO = CrdnPhotoVO.builder() .actInfoId(actInfoId) - .crdnPhotoSeCd("1") // 단속 사진 + .crdnPhotoSeCd(crdnPhotoSeCd) // 단속 사진 .build(); List photoList = photoService.selectPhotoListByActInfoIdAndPhotoSeCd(searchVO); diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/CrdnActInfoService.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/CrdnActInfoService.java index b4cd8a0..93437ed 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/CrdnActInfoService.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/CrdnActInfoService.java @@ -27,13 +27,13 @@ public interface CrdnActInfoService { /** * 불법위반행위정보 등록 (파일 포함) - * 중요한 로직 주석: 행위정보 등록과 함께 사진 파일도 처리한다. 모든 로직은 한 트랜잭션으로 처리된다. + * 중요한 로직 주석: 행위정보 등록과 함께 단속/조치 사진 파일도 처리한다. 모든 로직은 한 트랜잭션으로 처리된다. * @param vo 등록할 불법위반행위정보 - * @param photoFiles 업로드할 사진 파일 목록 (선택사항) - * @param crdnPhotoSeCd 사진 구분 코드 + * @param crdnPhotoFiles 업로드할 단속 사진 파일 목록 (선택사항) + * @param actnPhotoFiles 업로드할 조치 사진 파일 목록 (선택사항) * @return 등록 결과 */ - int insertActInfoWithFiles(CrdnActInfoVO vo, List photoFiles, String crdnPhotoSeCd); + int insertActInfoWithFiles(CrdnActInfoVO vo, List crdnPhotoFiles, List actnPhotoFiles); /** * 불법위반행위정보 상세 조회 (PK 기준) @@ -44,13 +44,13 @@ public interface CrdnActInfoService { /** * 불법위반행위정보 수정 (파일 포함) - * 중요한 로직 주석: 행위정보 수정과 함께 사진 파일도 처리한다. 모든 로직은 한 트랜잭션으로 처리된다. + * 중요한 로직 주석: 행위정보 수정과 함께 단속/조치 사진 파일도 처리한다. 모든 로직은 한 트랜잭션으로 처리된다. * @param vo 수정할 불법위반행위정보 - * @param photoFiles 업로드할 사진 파일 목록 (선택사항) - * @param crdnPhotoSeCd 사진 구분 코드 + * @param crdnPhotoFiles 업로드할 단속 사진 파일 목록 (선택사항) + * @param actnPhotoFiles 업로드할 조치 사진 파일 목록 (선택사항) * @return 수정 결과 */ - int updateActInfoWithFiles(CrdnActInfoVO vo, List photoFiles, String crdnPhotoSeCd); + int updateActInfoWithFiles(CrdnActInfoVO vo, List crdnPhotoFiles, List actnPhotoFiles); /** * 불법위반행위정보 삭제 (논리삭제) diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnActInfoServiceImpl.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnActInfoServiceImpl.java index 9d62e46..f6ccb9b 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnActInfoServiceImpl.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnActInfoServiceImpl.java @@ -54,9 +54,10 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C @Override @Transactional - public int insertActInfoWithFiles(CrdnActInfoVO vo, List photoFiles, String crdnPhotoSeCd) { - log.debug("불법위반행위정보 등록 (파일 포함): {}, 파일 개수: {}", vo, - photoFiles != null ? photoFiles.size() : 0); + public int insertActInfoWithFiles(CrdnActInfoVO vo, List crdnPhotoFiles, List actnPhotoFiles) { + log.debug("불법위반행위정보 등록 (파일 포함): {}, 단속 사진 개수: {}, 조치 사진 개수: {}", + vo, crdnPhotoFiles != null ? crdnPhotoFiles.size() : 0, + actnPhotoFiles != null ? actnPhotoFiles.size() : 0); try { // 중요한 로직 주석: 먼저 행위정보를 등록한다 (insertActInfo 메서드에서 actInfoId가 자동 설정됨) @@ -65,10 +66,16 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C if (result > 0) { log.debug("행위정보 등록 완료: actInfoId={}", vo.getActInfoId()); - // 중요한 로직 주석: 파일이 있는 경우에만 사진 처리를 진행한다 - if (photoFiles != null && !photoFiles.isEmpty()) { - int photoResult = photoService.insertPhotosWithFiles(photoFiles, vo.getActInfoId(), crdnPhotoSeCd, vo); - log.debug("사진 파일 처리 완료: actInfoId={}, 등록된 사진 수={}", vo.getActInfoId(), photoResult); + // 중요한 로직 주석: 단속 사진이 있는 경우 처리 (CRDN_PHOTO_SE_CD = '1') + if (crdnPhotoFiles != null && !crdnPhotoFiles.isEmpty()) { + int crdnPhotoResult = photoService.insertPhotosWithFiles(crdnPhotoFiles, vo.getActInfoId(), "1", vo); + log.debug("단속 사진 파일 처리 완료: actInfoId={}, 등록된 단속 사진 수={}", vo.getActInfoId(), crdnPhotoResult); + } + + // 중요한 로직 주석: 조치 사진이 있는 경우 처리 (CRDN_PHOTO_SE_CD = '2') + if (actnPhotoFiles != null && !actnPhotoFiles.isEmpty()) { + int actnPhotoResult = photoService.insertPhotosWithFiles(actnPhotoFiles, vo.getActInfoId(), "2", vo); + log.debug("조치 사진 파일 처리 완료: actInfoId={}, 등록된 조치 사진 수={}", vo.getActInfoId(), actnPhotoResult); } } else { log.error("행위정보 등록 실패: {}", vo); @@ -91,9 +98,10 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C @Override @Transactional - public int updateActInfoWithFiles(CrdnActInfoVO vo, List photoFiles, String crdnPhotoSeCd) { - log.debug("불법위반행위정보 수정 (파일 포함): {}, 파일 개수: {}", vo, - photoFiles != null ? photoFiles.size() : 0); + public int updateActInfoWithFiles(CrdnActInfoVO vo, List crdnPhotoFiles, List actnPhotoFiles) { + log.debug("불법위반행위정보 수정 (파일 포함): {}, 단속 사진 개수: {}, 조치 사진 개수: {}", + vo, crdnPhotoFiles != null ? crdnPhotoFiles.size() : 0, + actnPhotoFiles != null ? actnPhotoFiles.size() : 0); try { // 중요한 로직 주석: 먼저 행위정보를 수정한다 @@ -102,11 +110,17 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C if (result > 0) { log.debug("행위정보 수정 완료: actInfoId={}", vo.getActInfoId()); - // 중요한 로직 주석: 새로운 파일이 있는 경우에만 사진 추가 처리를 진행한다 + // 중요한 로직 주석: 새로운 단속 사진이 있는 경우 추가 처리 (CRDN_PHOTO_SE_CD = '1') // 기존 사진의 개별 삭제는 별도의 Ajax 호출로 처리되므로 여기서는 신규 추가만 한다 - if (photoFiles != null && !photoFiles.isEmpty()) { - int photoResult = photoService.insertPhotosWithFiles(photoFiles, vo.getActInfoId(), crdnPhotoSeCd, vo); - log.debug("사진 파일 추가 완료: actInfoId={}, 추가된 사진 수={}", vo.getActInfoId(), photoResult); + if (crdnPhotoFiles != null && !crdnPhotoFiles.isEmpty()) { + int crdnPhotoResult = photoService.insertPhotosWithFiles(crdnPhotoFiles, vo.getActInfoId(), "1", vo); + log.debug("단속 사진 파일 추가 완료: actInfoId={}, 추가된 단속 사진 수={}", vo.getActInfoId(), crdnPhotoResult); + } + + // 중요한 로직 주석: 새로운 조치 사진이 있는 경우 추가 처리 (CRDN_PHOTO_SE_CD = '2') + if (actnPhotoFiles != null && !actnPhotoFiles.isEmpty()) { + int actnPhotoResult = photoService.insertPhotosWithFiles(actnPhotoFiles, vo.getActInfoId(), "2", vo); + log.debug("조치 사진 파일 추가 완료: actInfoId={}, 추가된 조치 사진 수={}", vo.getActInfoId(), actnPhotoResult); } } else { log.error("행위정보 수정 실패: {}", vo); @@ -130,7 +144,10 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C if (vo.getActInfoId() != null) { try { photoService.deletePhotosByActInfoIdAndCrdnPhotoSecd(vo.getActInfoId(), "1", vo.getDltr()); - log.debug("행위정보 관련 사진 삭제 완료: actInfoId={}", vo.getActInfoId()); + log.debug("행위정보 단속 사진 삭제 완료: actInfoId={}, crdnPhotoSeCd={}", vo.getActInfoId(), "1"); + + photoService.deletePhotosByActInfoIdAndCrdnPhotoSecd(vo.getActInfoId(), "2", vo.getDltr()); + log.debug("행위정보 조치 사진 삭제 완료: actInfoId={}, crdnPhotoSeCd={}", vo.getActInfoId(), "2"); } catch (Exception e) { log.warn("행위정보 관련 사진 삭제 중 오류 발생: actInfoId={}", vo.getActInfoId(), e); // 사진 삭제 실패해도 행위정보 삭제는 진행 diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 0c94a3f..0baaa36 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,5 +1,9 @@ # Local profile spring: + servlet: + multipart: + max-file-size: 15MB # 개별 파일 최대 크기를 15MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함. + max-request-size: 150MB # 전체 요청 최대 크기를 150MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함. config: activate: on-profile: dev diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 374859b..a398cf7 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -1,5 +1,9 @@ # Local profile spring: + servlet: + multipart: + max-file-size: 15MB # 개별 파일 최대 크기를 15MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함. + max-request-size: 150MB # 전체 요청 최대 크기를 150MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함. config: activate: on-profile: local @@ -94,7 +98,7 @@ file: path: d:/data/@projectName@/file max-size: 10 # 단일 파일 최대 크기 (MB) max-total-size: 100 # 총 파일 최대 크기 (MB) - max-files: 10 # 최대 파일 개수 + max-files: 20 # 최대 파일 개수 allowed-extensions: hwp,jpg,jpeg,png,gif,pdf,doc,docx,xls,xlsx,ppt,pptx,txt,zip real-file-delete: true # 실제 파일 삭제 여부 sub-dirs: diff --git a/src/main/resources/application-prd.yml b/src/main/resources/application-prd.yml index ec70b86..68a9ce6 100644 --- a/src/main/resources/application-prd.yml +++ b/src/main/resources/application-prd.yml @@ -1,5 +1,9 @@ # Local profile spring: + servlet: + multipart: + max-file-size: 15MB # 개별 파일 최대 크기를 15MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함. + max-request-size: 150MB # 전체 요청 최대 크기를 150MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함. config: activate: on-profile: prd diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index f5a6a40..0088dea 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -7,9 +7,7 @@ server: charset: UTF-8 enabled: true force: true # 서버가 지정한 인코딩(UTF-8)을 항상 강제로 적용, 클라이언트의 요청과 상관없이 서버 인코딩이 우선 - multipart: - max-file-size: 10MB - max-request-size: 50MB + Globals: DbType: maria diff --git a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnActInfoMapper_maria.xml b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnActInfoMapper_maria.xml index d1c7197..88189e4 100644 --- a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnActInfoMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnActInfoMapper_maria.xml @@ -209,7 +209,7 @@ VRTC = #{vrtc}, AREA = #{area}, RMRK = #{rmrk}, - ACTN_YMD = #{actnYmd}, + ACTN_YMD = replace(#{actnYmd},'-',''), ACTN_AREA = #{actnArea}, ACTN_RMRK = #{actnRmrk}, MDFCN_DT = NOW(), diff --git a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnPhotoMapper_maria.xml b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnPhotoMapper_maria.xml index bc3dbfb..b1ddda1 100644 --- a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnPhotoMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnPhotoMapper_maria.xml @@ -25,7 +25,9 @@ FROM tb_crdn_photo p LEFT JOIN tb_cd_detail cd ON cd.CD_GROUP_ID = 'CRDN_PHOTO_SE_CD' AND cd.CD_ID = p.CRDN_PHOTO_SE_CD WHERE p.ACT_INFO_ID = #{actInfoId} + AND p.CRDN_PHOTO_SE_CD = #{crdnPhotoSeCd} + AND p.DEL_YN = 'N' ORDER BY p.CRDN_PHOTO_SN ASC diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup.jsp index 5fe314f..0a42edc 100644 --- a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup.jsp +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup.jsp @@ -20,15 +20,15 @@