강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của mongddangand9429
mongddangand9429

câu hỏi đã được viết

Spring MVC Phần 2 - Kỹ thuật vận dụng phát triển Web Backend

Tự xử lý kiểm chứng - Phát triển

강사님

Viết

·

302

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.
강사님 24:00경 errors가 없는 경우를 설명하실 때 post로 /add를 보내면
Map<String, String> errors = new HashMap<>(); 이것을 
코드에 넣어두기 때문에 errros가 비어있는게 아니라고 하셨는데
생성만 해도 @ModelAttribute와 같이 addObject를 해주는 건가요?
그게 아니라면 errors가 비어있어 /add를 post로 보내도 thymeleaf에서 볼 땐 비어있는 것으로 보일것 같아서요!

MVCspring

Câu trả lời 2

0

marlone Johnathan님의 프로필 이미지
marlone Johnathan
Người đặt câu hỏi

그건 

if (!errors.isEmpty()) 
이로직에 걸릴 때만 하는것 아닌가요? 비어있는 것에서는 아예 model에 put을 안하는데요

 

생각하신게 해당 메서드 첫라인 errors인스턴스를 생성하는 코드를 작성하여

성공로직에서 errors가 비어있더라도 화면단에서 오류가 발생하지 않는지 궁금해하시는 것 같습니다.

        //검증 오류 결과를 보관
        Map<String, String> errors = new HashMap<>();

        //검증 로직
        if (!StringUtils.hasText(item.getItemName())) {
           // errors.put("itemName", "상품 이름은 필수입니다.");
        }
        if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) {
           // errors.put("price", "가격은 1,000 ~ 1,000,000 까지 허용합니다.");
        }
        if (item.getQuantity() == null || item.getQuantity() >= 9999) {
         //   errors.put("quantity", "수량은 최대 9,999 까지 허용합니다.");
        }

        //특정 필드가 아닌 복합 룰 검증
        if (item.getPrice() != null && item.getQuantity() != null) {
            int resultPrice = item.getPrice() * item.getQuantity();
            if (resultPrice < 10000) {
                //errors.put("globalError", "가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = " + resultPrice);
            }
        }

        //검증에 실패하면 다시 입력 폼으로
        if (!errors.isEmpty()) {
            log.info("errors = {} ", errors);
            model.addAttribute("errors", errors);
            return "validation/v1/addForm";
        }

        //성공 로직
        Item savedItem = itemRepository.save(item);
        redirectAttributes.addAttribute("itemId", savedItem.getId());
        redirectAttributes.addAttribute("status", true);
        return "redirect:/validation/v1/items/{itemId}";

 

여기서 검증 실패 오류를 처리하는 코드를 제외하면 성공로직 코드만 남습니다.

 //검증 오류 결과를 보관
        Map<String, String> errors = new HashMap<>();

        //성공 로직
        Item savedItem = itemRepository.save(item);
        redirectAttributes.addAttribute("itemId", savedItem.getId());
        redirectAttributes.addAttribute("status", true);
        return "redirect:/validation/v1/items/{itemId}";

0

안녕하세요. marlone Johnathan님, 공식 서포터즈 OMG입니다.

Map<String, String> errors = new HashMap<>(); 

HashMap타입의 인스턴스를 model.addAttribute("errors", errors);

를 호출하였기 때문에 가능한 것으로 보시면 됩니다.

 

//검증에 실패하면 다시 입력 폼으로
if (!errors.isEmpty()) {
log.info("errors = {} ", errors);
model.addAttribute("errors", errors);
return "validation/v1/addForm";
}

감사합니다.

Hình ảnh hồ sơ của mongddangand9429
mongddangand9429

câu hỏi đã được viết

Đặt câu hỏi