nbs0105 / BOOT_CMS star
beom 4 days ago
팝업/배너 검증 어노테이션 적용
@684b1cb017f07522fa13e0a6bd62c5c7a9ac96ec
CHANGELOG_BOOT_JPA.md
--- CHANGELOG_BOOT_JPA.md
+++ CHANGELOG_BOOT_JPA.md
@@ -390,3 +390,15 @@
   - 메뉴 등록 시 `@Valid` 적용 및 검증 중복 제거
 - `/Users/beom/Documents/intellij/cms/FoxeduBaseCMS/base/src/main/java/egovframework/com/mng/sym/sit/web/SiteManageController.java`
   - 사이트 등록/수정 시 `@Valid` 적용 및 검증 중복 제거
+
+## 추가 변경(19차)
+
+### 팝업/배너 검증 어노테이션 적용
+- `/Users/beom/Documents/intellij/cms/FoxeduBaseCMS/base/src/main/java/egovframework/module/uss/ion/bnr/service/BannerVO.java`
+  - 배너 필드에 Bean Validation 어노테이션 추가
+- `/Users/beom/Documents/intellij/cms/FoxeduBaseCMS/base/src/main/java/egovframework/module/uss/ion/pwm/service/PopupManageVO.java`
+  - 팝업 필드에 Bean Validation 어노테이션 추가
+- `/Users/beom/Documents/intellij/cms/FoxeduBaseCMS/base/src/main/java/egovframework/com/mng/uss/ion/bnr/web/BannerManageController.java`
+  - 배너 등록/수정 시 `@Valid` 적용 및 오류 처리
+- `/Users/beom/Documents/intellij/cms/FoxeduBaseCMS/base/src/main/java/egovframework/com/mng/uss/ion/pwm/web/PopupManageController.java`
+  - 팝업 등록/수정 시 `@Valid` 적용 및 오류 처리
base/src/main/java/egovframework/com/mng/uss/ion/bnr/web/BannerManageController.java
--- base/src/main/java/egovframework/com/mng/uss/ion/bnr/web/BannerManageController.java
+++ base/src/main/java/egovframework/com/mng/uss/ion/bnr/web/BannerManageController.java
@@ -8,7 +8,6 @@
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.validation.BindingResult;
@@ -16,7 +15,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springmodules.validation.commons.DefaultBeanValidator;
+import jakarta.validation.Valid;
 
 import egovframework.com.cmm.EgovMessageSource;
 import egovframework.com.cmm.service.CmmUseService;
@@ -59,9 +58,6 @@
 	  
 	@Resource(name = "cmmUseService")
 	private CmmUseService     cmmUseService;
-	
-	@Autowired
-	private DefaultBeanValidator beanValidator;
 	
 	//배너를 관리하기 위해 등록된 배너목록을 조회한다.
 	@RequestMapping(value = "/manage/uss/ion/bnr/selectBannerList.do")
@@ -140,10 +136,24 @@
 	
 	//배너정보를 신규로 등록한다.
 	@RequestMapping(value = "/manage/uss/ion/bnr/addBanner.do")
-	public String insertBanner(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") BannerVO bannerVO, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
+	public String insertBanner(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") @Valid BannerVO bannerVO, BindingResult bindingResult, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
 
 		if(request.getSession().getAttribute("sessionVO") == null) {
 			return "forward:/manage/uss/ion/bnr/selectBannerList.do";
+		}
+		
+		if(bindingResult.hasErrors()) {
+			model.addAttribute("banner", bannerVO);
+			if("BAN001".equals(bannerVO.getBannerTyCode()) || "BAN002".equals(bannerVO.getBannerTyCode())) {
+				model.addAttribute("ntceBgndeHH", getTimeHH());
+				model.addAttribute("ntceBgndeMM", getTimeMM());
+				model.addAttribute("ntceEnddeHH", getTimeHH());
+				model.addAttribute("ntceEnddeMM", getTimeMM());
+			}
+			CmmnDetailCodeVO codeVO = new CmmnDetailCodeVO();
+			codeVO.setCodeId("COM109");
+			model.addAttribute("codeList", cmmUseService.selectCmmCodeDetail(codeVO));
+			return "/manage/uss/ion/bnr/BannerRegist";
 		}
 
 		LoginVO user = EgovUserDetailsHelper.getAuthenticatedUser(request, response);
@@ -189,11 +199,26 @@
 	
 	//기 등록된 배너정보를 수정한다.
 	@RequestMapping(value = "/manage/uss/ion/bnr/updtBanner.do")
-	public String updateBanner(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") BannerVO bannerVO, BindingResult bindingResult, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
+	public String updateBanner(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") @Valid BannerVO bannerVO, BindingResult bindingResult, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
 
 		if(request.getSession().getAttribute("sessionVO") == null) {
 			return "forward:/manage/uss/ion/bnr/selectBannerList.do";
 		}
+		
+		if(bindingResult.hasErrors()) {
+			model.addAttribute("banner", bannerVO);
+			CmmnDetailCodeVO codeVO = new CmmnDetailCodeVO();
+			codeVO.setCodeId("COM109");
+			model.addAttribute("codeList", cmmUseService.selectCmmCodeDetail(codeVO));
+			model.addAttribute("BannerFileStoreWebPath", propertyService.getString("Banner.fileStoreWebPath"));
+			if("BAN001".equals(bannerVO.getBannerTyCode()) || "BAN002".equals(bannerVO.getBannerTyCode())) {
+				model.addAttribute("ntceBgndeHH", getTimeHH());
+				model.addAttribute("ntceBgndeMM", getTimeMM());
+				model.addAttribute("ntceEnddeHH", getTimeHH());
+				model.addAttribute("ntceEnddeMM", getTimeMM());
+			}
+			return "/manage/uss/ion/bnr/BannerRegist";
+		}
 
 		LoginVO user = EgovUserDetailsHelper.getAuthenticatedUser(request, response);
 
base/src/main/java/egovframework/com/mng/uss/ion/pwm/web/PopupManageController.java
--- base/src/main/java/egovframework/com/mng/uss/ion/pwm/web/PopupManageController.java
+++ base/src/main/java/egovframework/com/mng/uss/ion/pwm/web/PopupManageController.java
@@ -13,6 +13,8 @@
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.validation.BindingResult;
+import jakarta.validation.Valid;
 
 import egovframework.com.cmm.EgovMessageSource;
 import egovframework.com.sec.ram.security.userdetails.util.EgovUserDetailsHelper;
@@ -90,7 +92,7 @@
     
     //팝업창을 수정한다.
     @RequestMapping(value = "/manage/uss/ion/pwm/updtPopup.do")
-    public String EgovPopupManageUpdt(@ModelAttribute("searchVO") PopupManageVO popupManageVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {
+    public String EgovPopupManageUpdt(@ModelAttribute("searchVO") @Valid PopupManageVO popupManageVO, BindingResult bindingResult, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {
         // 로그인 객체 선언
         LoginVO loginVO = EgovUserDetailsHelper.getAuthenticatedUser(request, response);
 
@@ -108,6 +110,11 @@
         if ("save".equals(popupManageVO.getCmd())){
         	if(request.getSession().getAttribute("sessionVO") == null) {
         		return "forward:/manage/uss/ion/pwm/listPopup.do";
+        	}
+        	
+        	if(bindingResult.hasErrors()) {
+        		model.addAttribute("popupManageVO", popupManageVO);
+        		return sLocationUrl;
         	}
 
             //아이디 설정
@@ -141,7 +148,7 @@
 
     //팝업창을 등록한다.
     @RequestMapping(value = "/manage/uss/ion/pwm/registPopup.do")
-    public String EgovPopupManageRegist(@ModelAttribute("searchVO") PopupManageVO popupManageVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {
+    public String EgovPopupManageRegist(@ModelAttribute("searchVO") @Valid PopupManageVO popupManageVO, BindingResult bindingResult, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {
 
         // 로그인 객체 선언
         LoginVO loginVO =  EgovUserDetailsHelper.getAuthenticatedUser(request, response);
@@ -161,6 +168,11 @@
         	if(request.getSession().getAttribute("sessionVO") == null) {
         		return "forward:/manage/uss/ion/pwm/listPopup.do";
         	}
+        	
+        	if(bindingResult.hasErrors()) {
+        		model.addAttribute("popupManageVO", popupManageVO);
+        		return sLocationUrl;
+        	}
 
             //아이디 설정
             popupManageVO.setFrstRegisterId((String)loginVO.getEsntlId());
base/src/main/java/egovframework/module/uss/ion/bnr/service/BannerVO.java
--- base/src/main/java/egovframework/module/uss/ion/bnr/service/BannerVO.java
+++ base/src/main/java/egovframework/module/uss/ion/bnr/service/BannerVO.java
@@ -13,6 +13,8 @@
 
 import egovframework.com.cmm.ComDefaultVO;
 import egovframework.module.utl.fcc.service.EgovDateUtil;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
 
 import java.io.Serializable;
 import java.util.List;
@@ -30,45 +32,62 @@
     String resultType = "horizontal";
 
 	//배너 ID
+	@Size(max = 20, message = "배너ID는 20자 이하여야 합니다.")
 	private String bannerId;
 
 	//배너 명
+	@NotBlank(message = "배너명은 필수입니다.")
+	@Size(max = 50, message = "배너명은 50자 이하여야 합니다.")
 	private String bannerNm;
 
 	//배너 타이틀
+	@Size(max = 50, message = "배너타이틀은 50자 이하여야 합니다.")
 	private String bannerTitle;
 
 	//링크 URL
+	@Size(max = 255, message = "링크URL은 255자 이하여야 합니다.")
 	private String linkUrl;
 
 	//배너 이미지
 	private String bannerImage;
 	//배너 이미지 파일
+	@Size(max = 255, message = "배너이미지파일은 255자 이하여야 합니다.")
 	private String bannerImageFile;
 	//배너 설명
+	@Size(max = 500, message = "배너설명은 500자 이하여야 합니다.")
 	private String bannerDc;
 
 	//반영여부
+	@NotBlank(message = "반영여부는 필수입니다.")
+	@Size(max = 1, message = "반영여부는 1자여야 합니다.")
 	private String reflctAt = "Y";
 
 	//파일첨부여부
 	private boolean isAtchFile;
 
 	//System Type 코드
+	@NotBlank(message = "시스템구분코드는 필수입니다.")
+	@Size(max = 15, message = "시스템구분코드는 15자 이하여야 합니다.")
 	private String sysTyCode = "";
 
 	//배너구분코드
+	@Size(max = 15, message = "배너구분코드는 15자 이하여야 합니다.")
 	private String bannerTyCode;
 
 	//배너주제분류코드(01:가로, 02:세로, 03:텍스트)
+	@Size(max = 15, message = "배너주제분류코드는 15자 이하여야 합니다.")
 	private String bannerThemaClCode;
 
 	//배너주제분류명
 	private String bannerThemaClCodeNm;
 
 	//게시시작일
+	@NotBlank(message = "게시시작일은 필수입니다.")
+	@Size(max = 14, message = "게시시작일은 14자여야 합니다.")
 	private String ntceBgnde = EgovDateUtil.getToday();
 	//게시종료일
+	@NotBlank(message = "게시종료일은 필수입니다.")
+	@Size(max = 14, message = "게시종료일은 14자여야 합니다.")
 	private String ntceEndde = EgovDateUtil.addDay(EgovDateUtil.getToday(), 7);
 
 	//게시시작일(시간)
@@ -84,12 +103,15 @@
 	private String ntceEnddeMM;
 
 	//새창보기여부
+	@Size(max = 1, message = "새창보기여부는 1자여야 합니다.")
 	private String popupTrgetAt = "Y";
 
 	//파일 삭제 여부
+	@Size(max = 1, message = "파일삭제여부는 1자여야 합니다.")
 	private String fileDeleteAt;
 
 	//배너 게시 중 여부
+	@Size(max = 1, message = "게시여부는 1자여야 합니다.")
 	private String serviceAt;
 
 	public List<BannerVO> getBannerList() {
base/src/main/java/egovframework/module/uss/ion/pwm/service/PopupManageVO.java
--- base/src/main/java/egovframework/module/uss/ion/pwm/service/PopupManageVO.java
+++ base/src/main/java/egovframework/module/uss/ion/pwm/service/PopupManageVO.java
@@ -2,35 +2,49 @@
 
 import egovframework.com.cmm.ComDefaultVO;
 import egovframework.module.utl.fcc.service.EgovDateUtil;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
 
 //팝업창에 대한 Vo 클래스를 정의한다.
 @SuppressWarnings("serial")
 public class PopupManageVO extends ComDefaultVO {
 
 	//팝업창아이디
+	@Size(max = 20, message = "팝업ID는 20자 이하여야 합니다.")
 	private String popupId;
 
 	//팝업창 타이틀명
+	@NotBlank(message = "팝업제목은 필수입니다.")
+	@Size(max = 255, message = "팝업제목은 255자 이하여야 합니다.")
 	private String popupTitleNm;
 
 	//실파일 URL
+	@Size(max = 255, message = "파일URL은 255자 이하여야 합니다.")
 	private String fileUrl;
 
 	//팝업창이 화면에 보여지는 가로 위치정보
+	@Size(max = 20, message = "가로위치는 20자 이하여야 합니다.")
 	private String popupWlc;
 
 	//팝업창이 화면에 보여지는 세로 위치정보
+	@Size(max = 20, message = "세로위치는 20자 이하여야 합니다.")
 	private String popupHlc;
 
 	//팝업창의 높이
+	@Size(max = 20, message = "팝업높이는 20자 이하여야 합니다.")
 	private String popupHSize;
 
 	//팝업창의 넚이
+	@Size(max = 20, message = "팝업너비는 20자 이하여야 합니다.")
 	private String popupWSize;
 
 	//게시시작일
+	@NotBlank(message = "게시시작일은 필수입니다.")
+	@Size(max = 14, message = "게시시작일은 14자여야 합니다.")
 	private String ntceBgnde = EgovDateUtil.getToday();
 	//게시종료일
+	@NotBlank(message = "게시종료일은 필수입니다.")
+	@Size(max = 14, message = "게시종료일은 14자여야 합니다.")
 	private String ntceEndde = EgovDateUtil.addDay(EgovDateUtil.getToday(), 7);
 
 	//게시시작일(시간)
@@ -46,23 +60,34 @@
 	private String ntceEnddeMM;
 
 	//그만보기 설정 여부
+	@NotBlank(message = "그만보기 설정여부는 필수입니다.")
+	@Size(max = 1, message = "그만보기 설정여부는 1자여야 합니다.")
 	private String stopVewAt = "Y";
 	//게시여부
+	@NotBlank(message = "게시여부는 필수입니다.")
+	@Size(max = 1, message = "게시여부는 1자여야 합니다.")
 	private String ntceAt = "Y";
 
 	//팝업내용
+	@Size(max = 10000, message = "팝업내용은 10000자 이하여야 합니다.")
 	private String popupCn;
 
 	//팝업목록여부
+	@NotBlank(message = "팝업목록여부는 필수입니다.")
+	@Size(max = 1, message = "팝업목록여부는 1자여야 합니다.")
 	private String popupListAt = "N";
 
 	//SYS_TY_CODE
+	@NotBlank(message = "시스템구분코드는 필수입니다.")
+	@Size(max = 15, message = "시스템구분코드는 15자 이하여야 합니다.")
 	private String sysTyCode;
 
 	//임시첨부파일 그룹아이디
+    @Size(max = 20, message = "첨부파일 그룹ID는 20자 이하여야 합니다.")
     private String fileGroupId = "";
 
 	//저장여부
+	@Size(max = 10, message = "저장여부는 10자 이하여야 합니다.")
 	private String cmd;
 
 
@@ -227,4 +252,4 @@
 	public void setCmd(String cmd) {
 		this.cmd = cmd;
 	}
-}
(파일 끝에 줄바꿈 문자 없음)
+}
Add a comment
List