앞선 질문내용이 잘못된것이 있어서 수정합니다. [질문 내용] @ModelAttribute는 지정된 객체를 생성하여, 요청 파라미터의 값을 해당 객체의 프로퍼티를 보고 입력해준다고 알고 있습니다. 그리고 자동으로 model.addAttribute("item", item); 을 실행해 줄텐데 이때 모델에 담기는 item은 기존에 업데이트하려는 item객체가 아니라 @ModelAttribute로 인해 새로 생성된 item을 넣어주게 되는 것 아닙니까? 해당 모델을 return "/basic/item"; 으로 넘겨주게 되면 새로 생성된 item은 updateParam이기 때문에 id값이 없어서 예외가 발생하는 문제가 있습니다. 따라서 redirect를 이용하여 return "redirect:/basic/items/{itemId}" 로 재요청을 하게되면 기존 model이 초기화 되고, itemId로 리포지토리에 있는 item을 찾고 해당 아이템을 model에 추가 하여 "/basic/item" Html From으로 경로 이름을 반환하는 것으로 이해하면 될까요? (추가) 리턴을 pathName으로 바로 해주어도 item.id에 값이 제대로 들어가는 것으로 확인되는데 Model에 담기는것은 updateParam 으로 id값이 없는 것으로 알고 있습니다. 어떻게 잘 작동하는지 궁금합니다.!
안녕하세요. 우선 좋은 강의 감사드립니다. 수업을 따라 진행하다가, quantity 검증과 관련해 질문이 있습니다. 일부러 수량(quantity)에 큰 값을 넣어봤는데요, 저장을 누르면 이 숫자를 문자로 인식하는 것 같습니다. 99999로 입력하면 올바른 에러가 발생하는데요, 캡쳐본에 있는 값으로 넣게 되면 2023-01-23 12:23:56.797 WARN 21288 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors Field error in object 'item' on field 'quantity': rejected value [9999999999999]; codes [typeMismatch.item.quantity,typeMismatch.quantity, typeMismatch.java .lang.Integer,typeMismatch]; arguments [ org.springframework.context.support .DefaultMessageSourceResolvable: codes [item.quantity,quantity]; arguments []; default message [quantity]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Integer' for property 'quantity'; nested exception is java.lang.NumberFormatException: For input string: "9999999999999"]] 이러한 에러가 발생하게됩니다. 혹시 이런 에러가 발생하는 이유가 있나요? 아 혹시 integer의 최대 숫자보다 커서 문자로 인식이되는건가요? 감사합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강사님께서 F12(개발자 도구 창)을 띄워서 Form Data가 넘어오는걸 보여주셨는데 그림을 보면 Headers 메뉴 안에 Form Data 가 있습니다.그런데 HTTP프로토콜에서 Form Data는 쿼리 스트링 형식으로 message body에 들어가서 전달 된다고 알고있는데 개발자 도구에서는 Headers메뉴에 있네용 편의상 Headers메뉴에 message body값도 같이 넣은건지 제가 뭔가 잘못이해하고 있는 건지 궁금합니다.
public void update(Long itemId, Item updateParam) { Item findItem = store.get(itemId); findItem = updateParam; } update() 메서드 코드를 수정한 것인데, 파라미터로 paramItemDto(id 없이 itemName, price, quantity로만 이뤄진 클래스)를 넘기는 것이 아니라 위와 같이 Item을 넘기는 경우라면, 코드를 이렇게 작성해도 괜찮은 것일까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? y 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? yy 3. 질문 잘하기 메뉴얼을 읽어보셨나요? y [질문 내용] 여기에 질문 내용을 남겨주세요. Truncated class file 라는 에러가 뜹니다. 하라는대로 다 하는중 이래도 안되네요 캐시도 삭제 그래도 같은 문제 발생 어떻게 해결해야하나요?? 진도가 1강에서 막혀버려서
서블릿과 파일 업로드2 를 학습하던 중 삭제가 불가능하다는 예외가 발생하면서 여러 방법을 시도해도 해결되지 않아 문의 드립니다. 개발 환경 window 사용중인 스프링 부트 버전 : 2.7.8 자바 언어 버전 : 11 properties 설정 경로 설정은 위의 사진처럼 했습니다. 에러 로그를 보면 삭제를 할 수 없다고 뜨면서 예외가 발생합니다. 로그 속에 있는 경로로 들어가 직접 파일 제거 시도 -> 서버가 내려갈 경우 파일이 삭제되는 것 확인 가능 해당 부분이 문제라고 생각됩니다. 해결하기 위해 했던 노력 관리자 권한으로 프로그램 실행 결과 : 실패 강의 자료 코드 그대로 옮겨 오기 결과 : 실패 강의 소스 코드 그대로 옮겨 오기 결과 : 실패 경로 바꿔 보기 결과 실패 총 4가지의 시도 결과 전부 실패해 문의 드립니다. 에러 발생 로그 내가 생각하는 로그 핵심 문제 원인 2023-01-22 21:42:00.789 WARN 31328 --- [nio-8080-exec-3] s.w.m.s.StandardServletMultipartResolver : Failed to perform cleanup of multipart items 2023-01-22 20:48:55.796 ERROR 28536 --- [nio-7070-exec-3] o.apache.coyote.http11.Http11Processor : Error processing request java.io .UncheckedIOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\ localhost \ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.delete( DiskFileItem.java:431 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.catalina.core.ApplicationPart.delete( ApplicationPart.java:54 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.catalina.connector.Request.recycle( Request.java:483 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.catalina.connector.CoyoteAdapter.service( CoyoteAdapter.java:441 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11Processor.service( Http11Processor.java:399 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProcessorLight.process( AbstractProcessorLight.java:65 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process( AbstractProtocol.java:891 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net .NioEndpoint$SocketProcessor.doRun( NioEndpoint.java:1784 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.SocketProcessorBase.run ( SocketProcessorBase.java:49 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1191 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:659 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run( TaskThread.java:61 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at java.base/java.lang.Thread.run( Thread.java:829 ) ~[na:na] Caused by: java.io .IOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\ localhost \ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp ... 13 common frames omitted 2023-01-22 20:48:55.796 DEBUG 28536 --- [nio-7070-exec-3] o.apache.coyote.http11.Http11Processor : Error state [CLOSE_CLEAN] reported while processing request java.io .UncheckedIOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\ localhost \ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.delete( DiskFileItem.java:431 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.catalina.core.ApplicationPart.delete( ApplicationPart.java:54 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.catalina.connector.Request.recycle( Request.java:483 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.catalina.connector.CoyoteAdapter.service( CoyoteAdapter.java:441 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11Processor.service( Http11Processor.java:399 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProcessorLight.process( AbstractProcessorLight.java:65 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process( AbstractProtocol.java:891 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net .NioEndpoint$SocketProcessor.doRun( NioEndpoint.java:1784 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.SocketProcessorBase.run ( SocketProcessorBase.java:49 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1191 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:659 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run( TaskThread.java:61 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at java.base/java.lang.Thread.run( Thread.java:829 ) ~[na:na] Caused by: java.io .IOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\ localhost \ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp ... 13 common frames omitted 2023-01-22 20:48:55.798 ERROR 28536 --- [nio-7070-exec-3] o.a.coyote.http11.Http11NioProtocol : Error reading request, ignored java.io .UncheckedIOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\ localhost \ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.delete( DiskFileItem.java:431 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.catalina.core.ApplicationPart.delete( ApplicationPart.java:54 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.catalina.connector.Request.recycle( Request.java:483 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.catalina.connector.CoyoteAdapter.log( CoyoteAdapter.java:515 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11Processor.service( Http11Processor.java:429 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProcessorLight.process( AbstractProcessorLight.java:65 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process( AbstractProtocol.java:891 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net .NioEndpoint$SocketProcessor.doRun( NioEndpoint.java:1784 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.SocketProcessorBase.run ( SocketProcessorBase.java:49 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1191 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:659 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run( TaskThread.java:61 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at java.base/java.lang.Thread.run( Thread.java:829 ) ~[na:na] Caused by: java.io .IOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\ localhost \ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp ... 13 common frames omitted 2023-01-22 20:48:55.799 ERROR 28536 --- [nio-7070-exec-3] org.apache.tomcat.util.net .NioEndpoint : Error running socket processor java.io .UncheckedIOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\ localhost \ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.delete( DiskFileItem.java:431 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.catalina.core.ApplicationPart.delete( ApplicationPart.java:54 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.catalina.connector.Request.recycle( Request.java:483 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.catalina.connector.CoyoteAdapter.log( CoyoteAdapter.java:515 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.catalina.connector.CoyoteAdapter.checkRecycled( CoyoteAdapter.java:539 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11Processor.recycle( Http11Processor.java:1439 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProtocol$ConnectionHandler.release( AbstractProtocol.java:1098 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process( AbstractProtocol.java:1056 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net .NioEndpoint$SocketProcessor.doRun( NioEndpoint.java:1784 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.SocketProcessorBase.run ( SocketProcessorBase.java:49 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1191 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:659 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run( TaskThread.java:61 ) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at java.base/java.lang.Thread.run( Thread.java:829 ) ~[na:na] Caused by: java.io .IOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\ localhost \ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp ... 14 common frames omitted
base.html 코드 일부분입니다. <!-- 추가 --> <th:block th:replace="${links}" /> <div th:replace="${links}"></div> 두 번째 줄은 th:block -> div로 바꾼 것입니다. th:replace로 인해서 <div> 코드가 2개의 <link>로 대체될 줄 알았는데, 아예 <div> 코드 자체가 출력이 안 되었습니다(소스코드 보기 했을 때). 왜 태그가 대체되는 것이 아니라 아예 출력되지 않는 것인가요..??
base.html의 코드 일부입니다. <head th:fragment="common_header(title,links)"> <title th:replace="${title}">레이아웃 타이틀</title> ... <!-- 추가 --> <th:block th:replace="${links}" /> </head> <title>을 넘기지 않았더니 exception이 발생했습니다. 태그를 반드시 넘겨야 하는 것이라면, 그래서 <title>이 교체될 것이라면 위 코드에서 <title>, '레이아웃 타이틀'을 작성하지 않아도 되는 것가요? <title> 대신 큰 의미없는 <div>나 (5번째 줄에서 작성한) <th:block>을 사용해도 되는 것인가요?
<div th:each="user : ${users}"> <div> 사용자 이름1 <span th:text="${user.username}"></span> 사용자 나이1 <span th:text="${user.age}"></span> </div> <div> 요약 <span th:text="${user.username} + ' / ' + ${user.age}"></span> </div> </div> <th:block> -> <div>로 바꾼 코드입니다. th:block 태그를 사용하지 않고 div 태그 2개를 반복할 수 있는 방법이 존재할 것 같아서 바꿔본 것인데, 가장 바깥 <div> 태그가 출력된다는 점을 제외하면 눈에 보이는 결과물은 동일합니다. 제가 아직 경험이 부족해서 <th:block>가 유용하게 사용되는 경우를 모르는 것이겠죠...? ㅠㅠ
<span th:text="${data}">html data</span> Model에 data가 있는 경우, 키가 data인 값이 'html data'를 대체합니다. 그런데, Model에 data가 없는 경우, 소스코드 보기로 확인해보니 <span></span>으로 출력되었습니다. 그렇다면 'html data'는 도대체 왜 작성하는 것인가요..??
<span th:text="10 + 2"></span> <span th:text="10 % 2 == 0"></span> '(작은따옴표) 생략 여부 관련해서 여쭤보고 싶습니다. 첫 번째 줄에서, 10+2 덧셈 연산이 이뤄진 후에 <span th:text="12"></span>이 되는데, 여기에서 사실은 '12'로 ''가 생략된 것인가요? 12가 숫자가 아닌 문자열로 인식되는 것이 맞나요? 마찬가지로 두 번째 줄에서, <span th:text="true"></span>가 되는데, 사실은 'true'로 ''가 생략된 것인가요? true가 boolean형이 아닌 문자열로 인식되는 것이 맞나요?
상세보기 구현하는 과정에 있어서 궁금한점이 있어서 질문드립니다. get이라는 컨트롤러를 만들고 /board/get?idx=${vo.idx}에서 선택한 idx에 따라서 링크가 이동되는것은 강의에서 잘 풀어주셔서 이해가 잘가는것 같습니다. 질문을 드리자면 단순하게 get?idx <--- 여기서 물음표를 넣으셨는데 이건 정해진건지 궁금하고 어떤 이유에서 ?가 적힌건지 궁금합니다. get!!idx 이런식으로 적으니까 안되더라구요 ㅠㅠ... 연휴 잘보내시길 바라면서 질 좋은 강의에 감사 드립니다!
jpa 라이브러리 추가했고 application 설정도 다 하고 @Configuration 애노테이션도 넣었는데 EntityManager가 빈으로 등록되어 있지 않다고 나옵니다. 왜 이러는걸까요? 프로젝트 링크: https://drive.google.com/file/d/1x_OeOhEBOKSNTiuzUqxY-zSyQmsmon5n/view?usp=share_link
입문 강의의 순수 JDBC 부분에서 제일 마지막 부분입니다. 제일 마지막으로 프로그램 실행을 해서 데이터베이스가 잘 작동하는지 확인하는데 강의안에 코드를 모두 복붙했기 때문에 오타는 없을건데 SpringConfig에서 저렇게 두개가 오류가 납니다. 첫번째 오류는 SpringConfig 파일 위치를 옮겨서 해결했는데 그 다음 오류인 위의 사진에서 빨간색 글씨로된 부분은 왜 오류가 나는지 모르겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 우선 개발환경은 우분투 22.04 버전입니다. 재부팅은 해보았습니다. 그래들을 빌드(sudo ./gradlew build)하고나서는 인텔리제이에서 run하면, 빨간 글자로unable to delete directory~오류가 발생합니다. gradle clean을 하면 인텔리에서 정상으로 실행됩니다.