팝업/배너 검증 어노테이션 적용
@684b1cb017f07522fa13e0a6bd62c5c7a9ac96ec
--- CHANGELOG_BOOT_JPA.md
+++ CHANGELOG_BOOT_JPA.md
... | ... | @@ -390,3 +390,15 @@ |
| 390 | 390 |
- 메뉴 등록 시 `@Valid` 적용 및 검증 중복 제거 |
| 391 | 391 |
- `/Users/beom/Documents/intellij/cms/FoxeduBaseCMS/base/src/main/java/egovframework/com/mng/sym/sit/web/SiteManageController.java` |
| 392 | 392 |
- 사이트 등록/수정 시 `@Valid` 적용 및 검증 중복 제거 |
| 393 |
+ |
|
| 394 |
+## 추가 변경(19차) |
|
| 395 |
+ |
|
| 396 |
+### 팝업/배너 검증 어노테이션 적용 |
|
| 397 |
+- `/Users/beom/Documents/intellij/cms/FoxeduBaseCMS/base/src/main/java/egovframework/module/uss/ion/bnr/service/BannerVO.java` |
|
| 398 |
+ - 배너 필드에 Bean Validation 어노테이션 추가 |
|
| 399 |
+- `/Users/beom/Documents/intellij/cms/FoxeduBaseCMS/base/src/main/java/egovframework/module/uss/ion/pwm/service/PopupManageVO.java` |
|
| 400 |
+ - 팝업 필드에 Bean Validation 어노테이션 추가 |
|
| 401 |
+- `/Users/beom/Documents/intellij/cms/FoxeduBaseCMS/base/src/main/java/egovframework/com/mng/uss/ion/bnr/web/BannerManageController.java` |
|
| 402 |
+ - 배너 등록/수정 시 `@Valid` 적용 및 오류 처리 |
|
| 403 |
+- `/Users/beom/Documents/intellij/cms/FoxeduBaseCMS/base/src/main/java/egovframework/com/mng/uss/ion/pwm/web/PopupManageController.java` |
|
| 404 |
+ - 팝업 등록/수정 시 `@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
... | ... | @@ -8,7 +8,6 @@ |
| 8 | 8 |
import jakarta.servlet.http.HttpServletRequest; |
| 9 | 9 |
import jakarta.servlet.http.HttpServletResponse; |
| 10 | 10 |
|
| 11 |
-import org.springframework.beans.factory.annotation.Autowired; |
|
| 12 | 11 |
import org.springframework.stereotype.Controller; |
| 13 | 12 |
import org.springframework.ui.ModelMap; |
| 14 | 13 |
import org.springframework.validation.BindingResult; |
... | ... | @@ -16,7 +15,7 @@ |
| 16 | 15 |
import org.springframework.web.bind.annotation.RequestMapping; |
| 17 | 16 |
import org.springframework.web.multipart.MultipartFile; |
| 18 | 17 |
import org.springframework.web.multipart.MultipartHttpServletRequest; |
| 19 |
-import org.springmodules.validation.commons.DefaultBeanValidator; |
|
| 18 |
+import jakarta.validation.Valid; |
|
| 20 | 19 |
|
| 21 | 20 |
import egovframework.com.cmm.EgovMessageSource; |
| 22 | 21 |
import egovframework.com.cmm.service.CmmUseService; |
... | ... | @@ -59,9 +58,6 @@ |
| 59 | 58 |
|
| 60 | 59 |
@Resource(name = "cmmUseService") |
| 61 | 60 |
private CmmUseService cmmUseService; |
| 62 |
- |
|
| 63 |
- @Autowired |
|
| 64 |
- private DefaultBeanValidator beanValidator; |
|
| 65 | 61 |
|
| 66 | 62 |
//배너를 관리하기 위해 등록된 배너목록을 조회한다. |
| 67 | 63 |
@RequestMapping(value = "/manage/uss/ion/bnr/selectBannerList.do") |
... | ... | @@ -140,10 +136,24 @@ |
| 140 | 136 |
|
| 141 | 137 |
//배너정보를 신규로 등록한다. |
| 142 | 138 |
@RequestMapping(value = "/manage/uss/ion/bnr/addBanner.do") |
| 143 |
- public String insertBanner(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") BannerVO bannerVO, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
|
|
| 139 |
+ public String insertBanner(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") @Valid BannerVO bannerVO, BindingResult bindingResult, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
|
|
| 144 | 140 |
|
| 145 | 141 |
if(request.getSession().getAttribute("sessionVO") == null) {
|
| 146 | 142 |
return "forward:/manage/uss/ion/bnr/selectBannerList.do"; |
| 143 |
+ } |
|
| 144 |
+ |
|
| 145 |
+ if(bindingResult.hasErrors()) {
|
|
| 146 |
+ model.addAttribute("banner", bannerVO);
|
|
| 147 |
+ if("BAN001".equals(bannerVO.getBannerTyCode()) || "BAN002".equals(bannerVO.getBannerTyCode())) {
|
|
| 148 |
+ model.addAttribute("ntceBgndeHH", getTimeHH());
|
|
| 149 |
+ model.addAttribute("ntceBgndeMM", getTimeMM());
|
|
| 150 |
+ model.addAttribute("ntceEnddeHH", getTimeHH());
|
|
| 151 |
+ model.addAttribute("ntceEnddeMM", getTimeMM());
|
|
| 152 |
+ } |
|
| 153 |
+ CmmnDetailCodeVO codeVO = new CmmnDetailCodeVO(); |
|
| 154 |
+ codeVO.setCodeId("COM109");
|
|
| 155 |
+ model.addAttribute("codeList", cmmUseService.selectCmmCodeDetail(codeVO));
|
|
| 156 |
+ return "/manage/uss/ion/bnr/BannerRegist"; |
|
| 147 | 157 |
} |
| 148 | 158 |
|
| 149 | 159 |
LoginVO user = EgovUserDetailsHelper.getAuthenticatedUser(request, response); |
... | ... | @@ -189,11 +199,26 @@ |
| 189 | 199 |
|
| 190 | 200 |
//기 등록된 배너정보를 수정한다. |
| 191 | 201 |
@RequestMapping(value = "/manage/uss/ion/bnr/updtBanner.do") |
| 192 |
- public String updateBanner(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") BannerVO bannerVO, BindingResult bindingResult, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
|
|
| 202 |
+ public String updateBanner(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") @Valid BannerVO bannerVO, BindingResult bindingResult, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
|
|
| 193 | 203 |
|
| 194 | 204 |
if(request.getSession().getAttribute("sessionVO") == null) {
|
| 195 | 205 |
return "forward:/manage/uss/ion/bnr/selectBannerList.do"; |
| 196 | 206 |
} |
| 207 |
+ |
|
| 208 |
+ if(bindingResult.hasErrors()) {
|
|
| 209 |
+ model.addAttribute("banner", bannerVO);
|
|
| 210 |
+ CmmnDetailCodeVO codeVO = new CmmnDetailCodeVO(); |
|
| 211 |
+ codeVO.setCodeId("COM109");
|
|
| 212 |
+ model.addAttribute("codeList", cmmUseService.selectCmmCodeDetail(codeVO));
|
|
| 213 |
+ model.addAttribute("BannerFileStoreWebPath", propertyService.getString("Banner.fileStoreWebPath"));
|
|
| 214 |
+ if("BAN001".equals(bannerVO.getBannerTyCode()) || "BAN002".equals(bannerVO.getBannerTyCode())) {
|
|
| 215 |
+ model.addAttribute("ntceBgndeHH", getTimeHH());
|
|
| 216 |
+ model.addAttribute("ntceBgndeMM", getTimeMM());
|
|
| 217 |
+ model.addAttribute("ntceEnddeHH", getTimeHH());
|
|
| 218 |
+ model.addAttribute("ntceEnddeMM", getTimeMM());
|
|
| 219 |
+ } |
|
| 220 |
+ return "/manage/uss/ion/bnr/BannerRegist"; |
|
| 221 |
+ } |
|
| 197 | 222 |
|
| 198 | 223 |
LoginVO user = EgovUserDetailsHelper.getAuthenticatedUser(request, response); |
| 199 | 224 |
|
--- 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 @@ |
| 13 | 13 |
import org.springframework.ui.ModelMap; |
| 14 | 14 |
import org.springframework.web.bind.annotation.ModelAttribute; |
| 15 | 15 |
import org.springframework.web.bind.annotation.RequestMapping; |
| 16 |
+import org.springframework.validation.BindingResult; |
|
| 17 |
+import jakarta.validation.Valid; |
|
| 16 | 18 |
|
| 17 | 19 |
import egovframework.com.cmm.EgovMessageSource; |
| 18 | 20 |
import egovframework.com.sec.ram.security.userdetails.util.EgovUserDetailsHelper; |
... | ... | @@ -90,7 +92,7 @@ |
| 90 | 92 |
|
| 91 | 93 |
//팝업창을 수정한다. |
| 92 | 94 |
@RequestMapping(value = "/manage/uss/ion/pwm/updtPopup.do") |
| 93 |
- public String EgovPopupManageUpdt(@ModelAttribute("searchVO") PopupManageVO popupManageVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {
|
|
| 95 |
+ public String EgovPopupManageUpdt(@ModelAttribute("searchVO") @Valid PopupManageVO popupManageVO, BindingResult bindingResult, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {
|
|
| 94 | 96 |
// 로그인 객체 선언 |
| 95 | 97 |
LoginVO loginVO = EgovUserDetailsHelper.getAuthenticatedUser(request, response); |
| 96 | 98 |
|
... | ... | @@ -108,6 +110,11 @@ |
| 108 | 110 |
if ("save".equals(popupManageVO.getCmd())){
|
| 109 | 111 |
if(request.getSession().getAttribute("sessionVO") == null) {
|
| 110 | 112 |
return "forward:/manage/uss/ion/pwm/listPopup.do"; |
| 113 |
+ } |
|
| 114 |
+ |
|
| 115 |
+ if(bindingResult.hasErrors()) {
|
|
| 116 |
+ model.addAttribute("popupManageVO", popupManageVO);
|
|
| 117 |
+ return sLocationUrl; |
|
| 111 | 118 |
} |
| 112 | 119 |
|
| 113 | 120 |
//아이디 설정 |
... | ... | @@ -141,7 +148,7 @@ |
| 141 | 148 |
|
| 142 | 149 |
//팝업창을 등록한다. |
| 143 | 150 |
@RequestMapping(value = "/manage/uss/ion/pwm/registPopup.do") |
| 144 |
- public String EgovPopupManageRegist(@ModelAttribute("searchVO") PopupManageVO popupManageVO, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {
|
|
| 151 |
+ public String EgovPopupManageRegist(@ModelAttribute("searchVO") @Valid PopupManageVO popupManageVO, BindingResult bindingResult, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {
|
|
| 145 | 152 |
|
| 146 | 153 |
// 로그인 객체 선언 |
| 147 | 154 |
LoginVO loginVO = EgovUserDetailsHelper.getAuthenticatedUser(request, response); |
... | ... | @@ -161,6 +168,11 @@ |
| 161 | 168 |
if(request.getSession().getAttribute("sessionVO") == null) {
|
| 162 | 169 |
return "forward:/manage/uss/ion/pwm/listPopup.do"; |
| 163 | 170 |
} |
| 171 |
+ |
|
| 172 |
+ if(bindingResult.hasErrors()) {
|
|
| 173 |
+ model.addAttribute("popupManageVO", popupManageVO);
|
|
| 174 |
+ return sLocationUrl; |
|
| 175 |
+ } |
|
| 164 | 176 |
|
| 165 | 177 |
//아이디 설정 |
| 166 | 178 |
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
... | ... | @@ -13,6 +13,8 @@ |
| 13 | 13 |
|
| 14 | 14 |
import egovframework.com.cmm.ComDefaultVO; |
| 15 | 15 |
import egovframework.module.utl.fcc.service.EgovDateUtil; |
| 16 |
+import jakarta.validation.constraints.NotBlank; |
|
| 17 |
+import jakarta.validation.constraints.Size; |
|
| 16 | 18 |
|
| 17 | 19 |
import java.io.Serializable; |
| 18 | 20 |
import java.util.List; |
... | ... | @@ -30,45 +32,62 @@ |
| 30 | 32 |
String resultType = "horizontal"; |
| 31 | 33 |
|
| 32 | 34 |
//배너 ID |
| 35 |
+ @Size(max = 20, message = "배너ID는 20자 이하여야 합니다.") |
|
| 33 | 36 |
private String bannerId; |
| 34 | 37 |
|
| 35 | 38 |
//배너 명 |
| 39 |
+ @NotBlank(message = "배너명은 필수입니다.") |
|
| 40 |
+ @Size(max = 50, message = "배너명은 50자 이하여야 합니다.") |
|
| 36 | 41 |
private String bannerNm; |
| 37 | 42 |
|
| 38 | 43 |
//배너 타이틀 |
| 44 |
+ @Size(max = 50, message = "배너타이틀은 50자 이하여야 합니다.") |
|
| 39 | 45 |
private String bannerTitle; |
| 40 | 46 |
|
| 41 | 47 |
//링크 URL |
| 48 |
+ @Size(max = 255, message = "링크URL은 255자 이하여야 합니다.") |
|
| 42 | 49 |
private String linkUrl; |
| 43 | 50 |
|
| 44 | 51 |
//배너 이미지 |
| 45 | 52 |
private String bannerImage; |
| 46 | 53 |
//배너 이미지 파일 |
| 54 |
+ @Size(max = 255, message = "배너이미지파일은 255자 이하여야 합니다.") |
|
| 47 | 55 |
private String bannerImageFile; |
| 48 | 56 |
//배너 설명 |
| 57 |
+ @Size(max = 500, message = "배너설명은 500자 이하여야 합니다.") |
|
| 49 | 58 |
private String bannerDc; |
| 50 | 59 |
|
| 51 | 60 |
//반영여부 |
| 61 |
+ @NotBlank(message = "반영여부는 필수입니다.") |
|
| 62 |
+ @Size(max = 1, message = "반영여부는 1자여야 합니다.") |
|
| 52 | 63 |
private String reflctAt = "Y"; |
| 53 | 64 |
|
| 54 | 65 |
//파일첨부여부 |
| 55 | 66 |
private boolean isAtchFile; |
| 56 | 67 |
|
| 57 | 68 |
//System Type 코드 |
| 69 |
+ @NotBlank(message = "시스템구분코드는 필수입니다.") |
|
| 70 |
+ @Size(max = 15, message = "시스템구분코드는 15자 이하여야 합니다.") |
|
| 58 | 71 |
private String sysTyCode = ""; |
| 59 | 72 |
|
| 60 | 73 |
//배너구분코드 |
| 74 |
+ @Size(max = 15, message = "배너구분코드는 15자 이하여야 합니다.") |
|
| 61 | 75 |
private String bannerTyCode; |
| 62 | 76 |
|
| 63 | 77 |
//배너주제분류코드(01:가로, 02:세로, 03:텍스트) |
| 78 |
+ @Size(max = 15, message = "배너주제분류코드는 15자 이하여야 합니다.") |
|
| 64 | 79 |
private String bannerThemaClCode; |
| 65 | 80 |
|
| 66 | 81 |
//배너주제분류명 |
| 67 | 82 |
private String bannerThemaClCodeNm; |
| 68 | 83 |
|
| 69 | 84 |
//게시시작일 |
| 85 |
+ @NotBlank(message = "게시시작일은 필수입니다.") |
|
| 86 |
+ @Size(max = 14, message = "게시시작일은 14자여야 합니다.") |
|
| 70 | 87 |
private String ntceBgnde = EgovDateUtil.getToday(); |
| 71 | 88 |
//게시종료일 |
| 89 |
+ @NotBlank(message = "게시종료일은 필수입니다.") |
|
| 90 |
+ @Size(max = 14, message = "게시종료일은 14자여야 합니다.") |
|
| 72 | 91 |
private String ntceEndde = EgovDateUtil.addDay(EgovDateUtil.getToday(), 7); |
| 73 | 92 |
|
| 74 | 93 |
//게시시작일(시간) |
... | ... | @@ -84,12 +103,15 @@ |
| 84 | 103 |
private String ntceEnddeMM; |
| 85 | 104 |
|
| 86 | 105 |
//새창보기여부 |
| 106 |
+ @Size(max = 1, message = "새창보기여부는 1자여야 합니다.") |
|
| 87 | 107 |
private String popupTrgetAt = "Y"; |
| 88 | 108 |
|
| 89 | 109 |
//파일 삭제 여부 |
| 110 |
+ @Size(max = 1, message = "파일삭제여부는 1자여야 합니다.") |
|
| 90 | 111 |
private String fileDeleteAt; |
| 91 | 112 |
|
| 92 | 113 |
//배너 게시 중 여부 |
| 114 |
+ @Size(max = 1, message = "게시여부는 1자여야 합니다.") |
|
| 93 | 115 |
private String serviceAt; |
| 94 | 116 |
|
| 95 | 117 |
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
... | ... | @@ -2,35 +2,49 @@ |
| 2 | 2 |
|
| 3 | 3 |
import egovframework.com.cmm.ComDefaultVO; |
| 4 | 4 |
import egovframework.module.utl.fcc.service.EgovDateUtil; |
| 5 |
+import jakarta.validation.constraints.NotBlank; |
|
| 6 |
+import jakarta.validation.constraints.Size; |
|
| 5 | 7 |
|
| 6 | 8 |
//팝업창에 대한 Vo 클래스를 정의한다. |
| 7 | 9 |
@SuppressWarnings("serial")
|
| 8 | 10 |
public class PopupManageVO extends ComDefaultVO {
|
| 9 | 11 |
|
| 10 | 12 |
//팝업창아이디 |
| 13 |
+ @Size(max = 20, message = "팝업ID는 20자 이하여야 합니다.") |
|
| 11 | 14 |
private String popupId; |
| 12 | 15 |
|
| 13 | 16 |
//팝업창 타이틀명 |
| 17 |
+ @NotBlank(message = "팝업제목은 필수입니다.") |
|
| 18 |
+ @Size(max = 255, message = "팝업제목은 255자 이하여야 합니다.") |
|
| 14 | 19 |
private String popupTitleNm; |
| 15 | 20 |
|
| 16 | 21 |
//실파일 URL |
| 22 |
+ @Size(max = 255, message = "파일URL은 255자 이하여야 합니다.") |
|
| 17 | 23 |
private String fileUrl; |
| 18 | 24 |
|
| 19 | 25 |
//팝업창이 화면에 보여지는 가로 위치정보 |
| 26 |
+ @Size(max = 20, message = "가로위치는 20자 이하여야 합니다.") |
|
| 20 | 27 |
private String popupWlc; |
| 21 | 28 |
|
| 22 | 29 |
//팝업창이 화면에 보여지는 세로 위치정보 |
| 30 |
+ @Size(max = 20, message = "세로위치는 20자 이하여야 합니다.") |
|
| 23 | 31 |
private String popupHlc; |
| 24 | 32 |
|
| 25 | 33 |
//팝업창의 높이 |
| 34 |
+ @Size(max = 20, message = "팝업높이는 20자 이하여야 합니다.") |
|
| 26 | 35 |
private String popupHSize; |
| 27 | 36 |
|
| 28 | 37 |
//팝업창의 넚이 |
| 38 |
+ @Size(max = 20, message = "팝업너비는 20자 이하여야 합니다.") |
|
| 29 | 39 |
private String popupWSize; |
| 30 | 40 |
|
| 31 | 41 |
//게시시작일 |
| 42 |
+ @NotBlank(message = "게시시작일은 필수입니다.") |
|
| 43 |
+ @Size(max = 14, message = "게시시작일은 14자여야 합니다.") |
|
| 32 | 44 |
private String ntceBgnde = EgovDateUtil.getToday(); |
| 33 | 45 |
//게시종료일 |
| 46 |
+ @NotBlank(message = "게시종료일은 필수입니다.") |
|
| 47 |
+ @Size(max = 14, message = "게시종료일은 14자여야 합니다.") |
|
| 34 | 48 |
private String ntceEndde = EgovDateUtil.addDay(EgovDateUtil.getToday(), 7); |
| 35 | 49 |
|
| 36 | 50 |
//게시시작일(시간) |
... | ... | @@ -46,23 +60,34 @@ |
| 46 | 60 |
private String ntceEnddeMM; |
| 47 | 61 |
|
| 48 | 62 |
//그만보기 설정 여부 |
| 63 |
+ @NotBlank(message = "그만보기 설정여부는 필수입니다.") |
|
| 64 |
+ @Size(max = 1, message = "그만보기 설정여부는 1자여야 합니다.") |
|
| 49 | 65 |
private String stopVewAt = "Y"; |
| 50 | 66 |
//게시여부 |
| 67 |
+ @NotBlank(message = "게시여부는 필수입니다.") |
|
| 68 |
+ @Size(max = 1, message = "게시여부는 1자여야 합니다.") |
|
| 51 | 69 |
private String ntceAt = "Y"; |
| 52 | 70 |
|
| 53 | 71 |
//팝업내용 |
| 72 |
+ @Size(max = 10000, message = "팝업내용은 10000자 이하여야 합니다.") |
|
| 54 | 73 |
private String popupCn; |
| 55 | 74 |
|
| 56 | 75 |
//팝업목록여부 |
| 76 |
+ @NotBlank(message = "팝업목록여부는 필수입니다.") |
|
| 77 |
+ @Size(max = 1, message = "팝업목록여부는 1자여야 합니다.") |
|
| 57 | 78 |
private String popupListAt = "N"; |
| 58 | 79 |
|
| 59 | 80 |
//SYS_TY_CODE |
| 81 |
+ @NotBlank(message = "시스템구분코드는 필수입니다.") |
|
| 82 |
+ @Size(max = 15, message = "시스템구분코드는 15자 이하여야 합니다.") |
|
| 60 | 83 |
private String sysTyCode; |
| 61 | 84 |
|
| 62 | 85 |
//임시첨부파일 그룹아이디 |
| 86 |
+ @Size(max = 20, message = "첨부파일 그룹ID는 20자 이하여야 합니다.") |
|
| 63 | 87 |
private String fileGroupId = ""; |
| 64 | 88 |
|
| 65 | 89 |
//저장여부 |
| 90 |
+ @Size(max = 10, message = "저장여부는 10자 이하여야 합니다.") |
|
| 66 | 91 |
private String cmd; |
| 67 | 92 |
|
| 68 | 93 |
|
... | ... | @@ -227,4 +252,4 @@ |
| 227 | 252 |
public void setCmd(String cmd) {
|
| 228 | 253 |
this.cmd = cmd; |
| 229 | 254 |
} |
| 230 |
-}(파일 끝에 줄바꿈 문자 없음) |
|
| 255 |
+} |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?