월 16,940원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
SSR환경에서 Service Layer의 Exception을 View(Thymeleaf)로 처리하는 방법
안녕하세요 영한님영한님의 새로운 도전 응원 드린다는 말씀 먼저 드립니다. 😄 질문이 있습니다. Service Layer에서 발생한 Exception을 @ControllerAdvice를 통해 예외처리하는 방법 말고바로 예외가 발생한 페이지 View(Thymeleaf)로 예외처리에 대한 결과를 전달할 수 있는 방법이 있을까요? 예를 들어 회원 탈퇴 Service에서 Exception이 발생하면 그 결과를 회원 탈퇴 View에 예외를 전달하는 것 입니다. 제가 고민해본 결과 2가지 방법이 있는것 같습니다.Service Layer에서 발생한 예외를 커스텀하게 처리하여 BindingResult를 통해서 원하는 View로 전달@ControllerAdvice에서 @ExceptionHandler(Exception.class)설정하여 각 페이지에 대하여 ModelAndView를 이용하여 전달 아래는 Service Layer에서 예외처리를 하는 예시코드 입니다. MemberController@Controller @RequiredArgsConstructor public class MemberController { private final MemberService memberService; // 회원 탈퇴 @PostMapping("/withdrawal") public String withdrawal(@ModelAttribute("form") WithdrawalForm form) { // 회원 탈퇴 로직 memberService.withdrawalMember(form.getUserId()); return "redirect:/user/login"; } } MemberServiceImpl@Service @Transactional @RequiredArgsConstructor public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository; // 회원 탈퇴 @Override public void withdrawalMember(String userId) { // 회원 조회 Optional<Member> optionalMember = memberRepository.findByUserId(userId); Member findMember = optionalMember.orElseThrow(() -> new IllegalArgumentException("존재하는 회원이 없습니다.")); // 회원 삭제 memberRepository.delete(findMember); } } 감사합니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
FieldError에 관해서 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]제가 v1에서는 "itemPrice" 라고 key값을 입력했었는데 잘 작동이 되었습니다하지만 v2에서 FieldError의 field값에 itemPrice라고 적고 나중에 꺼내서 쓸려고 하니 "Cannot resolve 'itemprice'" 라는 오류 메시지를 확인했습니다. FieldError는 무조건 검증하고자 하는 객체의 필드의 이름과 같은 값이 들어가야 하는 건가요??
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
질문드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. th:errors= "*{itemName}"에서 itemName은 obeject의 item.itemName이랑 전혀 상관없는 그냥 bindingresult에 있는 필드 itemName의 값인건가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
webconfig의 구조에 대한 질문이 있습니다.
현재 WebConfig는 필터나 인터셉트를 등록하기 위한 webconfig를 만드셨는데만약 repository나 service 구현체들이 나뉠때 구현체들을 bean등록(?)할때 쓰던 WebConfig가 필요하다면필터나 인터셉트를 등록하는 webconfig와repository나 service 구현체를 bean등록(?)하는 webconfig를 구분하는게 좋을까요? 그냥 하나로 합치는게 좋을까요??역할이 다르니 구분하는게 좋을까요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
쿠키는 유저당 하나만 생성이 되나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]서버에 세션스토어안에 여러 세션이있고 특정 세션을 구분할 수 있는 키를 UUID로 가지고 있으며 그것을 쿠키도 value값으로 가지고 있다. 라고 이해했습니다.그러면 유저가 여러 세션을 가지고 있으면 쿠키 하나로 그 세션 들을 전부 불러 올 수 있는건가요?그렇다면 쿠키의 value값을 여러개 가질 수 있는건가요? 쿠키의 이름이 JESSSION 하나 뿐인 것으로 보여서요.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
질문드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. @ModelAttribute Member mebmer2 이렇게 있으면 객체 이름으로되서 member2로 저장되지않나요? 그렇게 알고있는데 한번은 클래스이름 Member에서 앞글자 하나만 소문자로 바꾼 member로 모델에 등록된다고 말씀하신거같아서
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 타임리프에서 id= "quantitiy"랑 th:field= "*{quantity}랑 다른거아닌가요?? field가 id까지 대채가 되니까 두개 같다고 쓰신거같은데 field는 obejct받아서 item.quantity값이고 id는 문자 "quantitiy"그자체 잖아요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 등록할때 id가 없다는게 무슨뜻인가요?? 등록폼에서 아이디 123으로 입력했는데... 이해가잘안되네요
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
질문드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 타임리프에서 label이랑 input id가 같으면 결합되는걸로 아는데, input id= *{name}이고 label for= "name"이면 다른거아닌가요?input은 객체에서 'name'이라는 필드 이름이고 예를들어서 "abc"라는 이름이 들어올텐데 label for은 그냥 "name"이잖아요? 객체랑연관이 안되어있으니 그래서 "abc"랑 "name"인거 같은데, label for= "name"에서 어떻게 객체에서 읽어드린 필드명으로 치환될수있는건가요?
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
실무에서 Session
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]실무에서 Session을 어떻게 사용하는지 궁금합니다.위 그림은 실제 인프런에서 오는 쿠키들 입니다. 그런데 배웠던 것과는 다르게, 여러개의 쿠키가 전달되고, 이름이 JSESSIONID인 쿠키는 없었습니다...제가 정확하게 이해한 것인지는 모르겠지만,request.getSession()은 쿠키들 중 이름이 JSESSIONID인 것을 찾고, 세션 저장소에서 이 쿠키의 value와 매칭되는 세션을 찾아 반환하는 것이라고 생각합니다.그렇다면, 위와 같이 인프런에서는 JSESSIONID를 사용하지 않기 때문에 V1처럼 자체적으로 세션 저장소를 사용하는 건가요? 그리고 여러개의 쿠키와 세션을 사용하고 싶다면, 여러개의 세션 저장소를 만들어서 사용하는 건가요? 감사합니다!
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
BasicErrorController의 errorHtml()에서 뷰를 찾는 매커니즘
WAS가 /error 요청(이때, Accept: text/html) -> BasicErrorController의 errorHtml() 호출 -> 클라이언트에게는 뷰(오류 페이지)가 전달됩니다. 이 뷰를 찾는 매커니즘이, (이전 파트에서 배웠던) 'BasicErrorController에서 정한 뷰 선택 우선순위에 따라 뷰를 선택. templates/error 폴더 -> static/error 폴더 -> error.html'를 의미하는게 맞나요?
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
트랜잭션 AOP가 만드는 프록시 객체
스프링 DB를 복습하던 중에 처음 강의 들었을 때는 미처 생각하지 못했던 의문점이 생겨 질문 드립니다.스프링에서는 @Transactional annotation을 사용할 때, @Transactional이 붙은 클래스의 실제 객체 대신 프록시 객체를 만들어서 스프링 컨테이너에 등록한다고 강의에서 들었습니다. 스프링 컨테이너에 등록된 프록시 객체는 내부적으로 실제 객체를 호출하는 것으로 알고 있는데, 그럼 이 실제 객체는 어디에 저장되어있는건가요? 실제 객체도 스프링 컨테이너에 등록되어 있는건지, 아니면 별도의 저장공간에 존재하는건지 궁금합니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
BasicErrorController에서 뷰를 선택하는 우선순위 관련
public class ServletExController { @GetMapping("/error-404") public void error404(HttpServletResponse response) throws IOException { response.sendError(404, "404 오류 발생!"); } }templates/error/4xx.html, static/error/404.html라는 2개의 오류 페이지를 등록했습니다./error-404 요청 -> WAS가 sendError() 호출 기록 확인 -> WAS가 /error 요청 -> 이 요청을 BasicErrorController에게 전달 -> BasicErrorController은, 뷰 우선순위에 따라 뷰(오류 페이지)를 선택합니다.templates폴더가 static 폴더보다 우선순위가 높기 때문에 'templates/error/4xx.html' 파일이 선택될 줄 알았는데, 'static/error/404.html 파일이 선택되었습니다. 왜 그런 것일까요? 혹시 templates, static 폴더보다 파일명(400, 4xx)에 대한 우선순위가 높은 것이 영향이 있을까요...?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
regions의 컬랙션 객체
컨트롤러에서 Map 타입 region의 값을 넣어주는데@ModelAttribute("regions") public Map<String, String> regions() { Map<String, String> regions = new LinkedHashMap<>(); regions.put("SEOUL", "서울"); regions.put("BUSAN", "부산"); regions.put("JEJU", "제주"); return regions; } Item 객체의 regions에는 값을 언제 넣어주는 지 궁금합니다.@Data public class Item { private List<String> regions; //등록 지역 } 아래 질문을 보면https://www.inflearn.com/questions/298992/regions-%ED%95%84%EB%93%9C%EC%9D%98-%EA%B0%92%EC%9D%B4-%EC%B6%94%EA%B0%80%EB%90%98%EB%8A%94-%EB%8F%99%EC%9E%91%EB%B0%A9%EC%8B%9D%EC%9D%B4-%EA%B6%81%EA%B8%88%ED%95%A9%EB%8B%88%EB%8B%A4스프링이 List 타입으로 선언한 regions에도 컬랙션 객체를 만들어서 자동으로 값을 넣어준다고 말씀하셨는데 하나는 Map이고 다른하나는 LIst로 서로 다른 컬랙션 객체인데 어떻게 값을 넣어 주는 지 궁금합니다. 정리하면 아래 addForm.html 코드에서<!-- multi checkbox --> <div> <div>등록 지역</div> <div th:each="region : ${regions}" class="form-check form-check-inline"> <input type="checkbox" th:field="*{regions}" th:value="${region.key}" class="form-check-input"> <label th:for="${#ids.prev('regions')}" th:text="${region.value}" class="form-check-label">서울</label> </div> </div> <input type="checkbox" th:field="*{regions}" th:value="${region.key}">에서item.regions에 값을 넣어주지도 않았는데item.regions와 region.key가 어떻게 비교할 수 있는 지 궁금합니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
다중 인터셉터의 경우 호출 순서가 어떻게 되는지 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요?예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예/3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.<스프링 인터셉터 - 인증 체크> 강의 수강 중 의문이 생겨 질문드립니다. 다중 인터셉터의 경우 ( 편의 상 1, 2 로 표기할게요) 구글링해보니까pre 1 -> pre 2 -> 컨트롤러 호출 -> post 2 -> post 1 -> 요청 처리완료 -> after2 -> after 1이 순으로 호출된다고 하는데 맞을까요? 그리고, 미인증상태로 items/add 를 들어갔을 때 pre2 까지 수행 후 리다이렉트 + return false; 니까 다음 인터셉터는 수행되지 않는다 생각해서 after1 도 수행되지 않을 거라 생각했는데 로그에는 수행이 되더라구요. 컨트롤러에서 예외가 발생한게 아니라, preHandle 에서 false를 반환하는 경우에도 afterCompletion은 수행되는건가요?아니면 두번째 인터셉터의 preHandle이 false를 반환한거라 두번째 인터셉터만 건너뛰는거고 첫 번째 인터셉터랑은 무관해서 수행된걸까요?2023-05-09 13:56:35.412 INFO 32688 --- [nio-8080-exec-7] h.login.web.interceptor.Loginterceptor : REQUEST [14810694-f53d-4526-9a1f-5b95b3c0c010] [/items/add] [hello.login.web.item.ItemController#addForm(Model)] 2023-05-09 13:56:35.419 INFO 32688 --- [nio-8080-exec-7] h.l.w.interceptor.LoginCheckInterceptor : 인증 체크 인터셉터 실행 /items/add 2023-05-09 13:56:35.427 INFO 32688 --- [nio-8080-exec-7] h.l.w.interceptor.LoginCheckInterceptor : 미인증 사용자 요청 2023-05-09 13:56:35.432 INFO 32688 --- [nio-8080-exec-7] h.login.web.interceptor.Loginterceptor : RESPONSE [14810694-f53d-4526-9a1f-5b95b3c0c010][/items/add][hello.login.web.item.ItemController#addForm(Model)] 2023-05-09 13:56:35.468 INFO 32688 --- [nio-8080-exec-6] h.login.web.interceptor.Loginterceptor : REQUEST [5fb2bde4-eba5-4f97-b294-bad2597bd5f1] [/login] [hello.login.web.login.LoginController#loginForm(LoginForm)] 2023-05-09 13:56:35.495 INFO 32688 --- [nio-8080-exec-6] h.login.web.interceptor.Loginterceptor : postHandle [ModelAndView [view="login/loginForm"; model={loginForm=LoginForm(loginId=null, password=null), org.springframework.validation.BindingResult.loginForm=org.springframework.validation.BeanPropertyBindingResult: 0 errors}]] 2023-05-09 13:56:35.529 INFO 32688 --- [nio-8080-exec-6] h.login.web.interceptor.Loginterceptor : RESPONSE [5fb2bde4-eba5-4f97-b294-bad2597bd5f1][/login][hello.login.web.login.LoginController#loginForm(LoginForm)] 2023-05-09 13:56:35.699 INFO 32688 --- [nio-8080-exec-8] h.l.w.interceptor.LoginCheckInterceptor : 인증 체크 인터셉터 실행 /favicon.ico 2023-05-09 13:56:35.699 INFO 32688 --- [nio-8080-exec-8] h.l.w.interceptor.LoginCheckInterceptor : 미인증 사용자 요청 2023-05-09 13:56:35.709 INFO 32688 --- [nio-8080-exec-9] h.login.web.interceptor.Loginterceptor : REQUEST [5ad8ae3f-2e48-479e-8013-4ffc72ecaf06] [/login] [hello.login.web.login.LoginController#loginForm(LoginForm)] 2023-05-09 13:56:35.709 INFO 32688 --- [nio-8080-exec-9] h.login.web.interceptor.Loginterceptor : postHandle [ModelAndView [view="login/loginForm"; model={loginForm=LoginForm(loginId=null, password=null), org.springframework.validation.BindingResult.loginForm=org.springframework.validation.BeanPropertyBindingResult: 0 errors}]] 2023-05-09 13:56:35.719 INFO 32688 --- [nio-8080-exec-9] h.login.web.interceptor.Loginterceptor : RESPONSE [5ad8ae3f-2e48-479e-8013-4ffc72ecaf06][/login][hello.login.web.login.LoginController#loginForm(LoginForm)] 혹시 여기서 말하는 '나머지 인터셉터'가 다른 인터셉터의preHandle만 의미하는 건가요? 그래서 postHandle, afterCompletion 이랑은 별개인걸까요 아직 내용을 잘 숙지하지는 못한 상태라 질문이 매끄럽지 못한점 양해부탁드려요.감사합니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
현재 연결은 사용자의 호스트 시스템의 소프트웨어의 의해 중단되었습니다.
구글에 쳐봐도 제데로된 해결 방안이 안 나옵니다. 재부팅도 해보고, 핫스팟 문제도 해결해봤지만 계속해서 똑같은 오류가 발생합니다.해결부탁드립니다.ㅠㅠㅠ
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
질문드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. BindingResult가 model로 자동 등록되서 타임리프 코드에서 th:object="${item}"이 여기서 등록된걸 참조하는것 같은데요 @ModelAttribute도 model로 자동 등록하지않나요? 그러면 item이라는 이름으로 model에 등록된게 같은이름으로 2개가 아닌지요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
css style 태그 적용
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]CSS <style> 태그의 클래스이름과body에서 input 태그의 클래스 이름 설정이 다른데 어떻게 적용이 되는지 궁금합니다. <style> .container { max-width: 560px; } .field-error{ // 이 부분 border-color: #dc3545; color: #dc3545; } </style> <div> <label for="itemName" th:text="#{label.item.itemName}">상품명</label> <input type="text" id="itemName" th:field="*{itemName}" th:class="${errors?.containsKey('itemName')} ? 'form-control field-error' : 'form-control'" class="form-control" placeholder="이름을 입력하세요"> <div class="field-error" th:if="${errors?.containsKey('itemName')}" th:text="${errors['itemName']}"> 상품명 오류 </div> </div>아래 코드를 보면 오류 발생시클래스 이름을 'form-control field-error'로 설정했는데 css를 보면 .field-error 으로 클래스 이름을 찾아서 적용하는데 어떻게 이렇게 되는지 궁금합니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
문서에 오타가 있습니다!
타임리프 - 기본 기능기본적으로 이스케이스(escape)를 제공한다. -> 기본적으로 이스케이프(escape)를 제공한다. 감사합니다:)
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:each 사용법과 관련 질문입니다
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]<div> <div>등록 지역</div> <div th:each="region : ${regions}" class="form-check form-check-inline"> <input type="checkbox" th:field="${item.regions}" th:value="${region.key}" class="form-check-input"> <label th:for="${#ids.prev('regions')}" th:text="${region.value}" class="form-check-label">서울</label> </div> </div>each 반복이 돌아가면서 region에는 "서울","부산","제주" 이렇게 3개의 지역이 들어가기에 구문이 3번 반복됩니다. 그리고 구문이 반복되면서 region의 서울, 부산, 제주가 순서대로 대입되는 것까지 알겠습니다. 그런데 영상에서는 th:field="${item.regions}"이렇게 했는데 현재 item.regions에는List<String> regions; //서울, 부산, 제주서울, 부산, 제주가 이렇게 들어있는데item.regions도 첫번째 구문 돌 때 서울두번째 돌 때 부산세번쨰 돌때 제주 이렇게 자연스럽게 대입이 되는 건가요?요약하면 regions를 기준으로 each구문이 돌게했는데th:field에 적용한 item.regions에 들어있는 항목도순서대로 대입이 되는건지 궁금합니다.