묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
모임 만들기 페이지에서 시간을 설정할 때, 연월일 제외하고 시간만 입력하려면 어떻게 하면 되는지요?
안녕하세요. 모임 만들기 페이지에서 시간을 설정할 때,연월일 제외하고 시간만 입력하려면 어떻게 하면 되는지요?fragments.html 의 <div th:fragment="event-form (mode, action)"> 에서<input id="endEnrollmentDateTime" type="datetime-local"의 type 부분을 type="time" 으로 하고Event 클래스에서 private LocalDateTime endEnrollmentDateTime;을private DateTime endEnrollmentDateTime;로 변경하고 실행하면 html 상에서는 시간이 입력되나,DB 에는 insert 되어 있지 않습니다.어떻게 하면 가능한지요?자세한 설명 부탁드립니다. 그리고, 제공해 주신 소스를 다운로드해서 프로젝트를 실행한 후, 오른쪽 드롭다운 메뉴 중스터디를 클릭해도 아무 동작이 일어나지 않습니다.소스를 보면<a class="dropdown-item" >스터디</a>이렇게만 나와있고 th:href="@{}" 로 연결된 페이지가 없습니다.이 부분 기능 구현은 안 해 놓으신 건지요? 프로필 페이지에서도왼쪽 프로필 사진 밑에 있는스터디 버튼을 누르면 Study 라고만 나오고별다른 페이지가 나오지 않습니다.이 부분도 기능 구현은 안 해 놓으신 건지요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
thymeleaf 적용이 안됩니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술상품목록 - 타임리프 진행중에 문제가 생겼습니다.타임리프에 문제가 있는지.. 변수가 안담깁니다.구글링으로 찾아봐서 캐쉬초기화도 해봤고"http://www.thymeleaf.org" 를 http://thymeleaf.org 로 변경도 해봤지만 경고문만 사라지고 해결되지 않았습니다.근데 여기서 이상한건th:onclick="|location.href='@{/basic/items/add}'|" 이 타임리프 문장은 작동이 되는것 같아요저 코드대로 /basic/items/add 경로로 이동이 됩니다.자바코드에 문제가 있나 확인도 해봤지만 문제점을 찾지 못했습니다 확인해야할게 더 있으면 알려주시면 감사하겠습니다...
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Thymeleaf 작성 방식
// 1번 <link th:href="@{/css/bootstrap.min.css}" href="../css/bootstrap.min.css" rel="stylesheet"> // 2번 <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">실무에서 타임리프를 작성할 때 1번처럼 th:href 속성과 href 속성을 같이 남겨두는지 2번처럼 th:href 속성만 남겨두는지 궁금합니다.뷰 템플릿을 순수 html 파일로 사용하지 않는 이상 코드 중복이 없는 2번 방식을 사용하는 것이 더 좋아보이는데 실무에서 1번 방식을 사용해야만 하는 경우가 있을지 궁금합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
타임리프 링크 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.영한 님의 강의 내용을 복습해보기 위해 혼자서 간단한 게시판 프로젝트를 만들어보고 있습니다.동적 페이지 처리도 타임리프로 하고 있는데, 문득 타임리프의 링크에 대해서 궁금한 점이 생겨 문의드립니다.타임리프에서는 링크 표현식이 th:href="@{/css/bootstrap.min.css}"와 같이 @{}를 활용해야 한다고 하셨습니다. 그러나 실험을 하면서, th:href="'/css/bootstrap.min.css'" 처럼 @{}를 활용하지 않고 작은 따옴표로 표현했을 때도 문제가 없이 동작함을 알게 되었습니다. 혹시 static 폴더에서도 css 파일이 있기 때문에 문제 없는건가? 라고 생각해서 static 폴더에 있던 css 파일을 지워봤는데, 그래도 templates에 css 파일이 있기 때문에 정상적으로 css 파일이 불러옴을 알게 되었습니다.@{}를 활용한 방법과, ''를 활용한 방법은 어떤 차이가 있는지 궁금합니다.(마찬가지로 <button th:onclick="|location.href='board'|">와 같이 작성해도 문제 없이 동작하였습니다. 왜 이런 상황에서도 제대로 작동하는지, 하지만 이런 상황일 때는 ||로 감싸야만 문제가 없는데 왜 그런지도 궁금합니다..!)
-
해결됨스프링과 JPA 기반 웹 애플리케이션 개발
Windows 환경에서 프로필 이미지 변경 Jdenticon 안보이는 현상 문의
안녕하세요.Windows 환경에서 프로필 이미지 변경 화면 접속 시, 아래와 같이 Jdenticon이 안보이는 현상이 발견되네요.IDE를 통해 로컬에서 실행하여 확인할때뿐만 아니라 프로젝트를 Dockerizing한 후, 외부 서버에 컨테이너 형태로 띄운 상태에서 접속하여 동작 확인을 해도 동일한 현상이 나옵니다. 이와 반대로, Mac OS 환경에서는 모두 정상적으로 나옵니다.위 현상과 관련하여 뭔가 Dependency가 있는 요소가 있는걸까요?? 브라우저 캐시 삭제를 해봤는데도 마찬가지네요. 구글링해봐도 관련 내용이 잘 나오지도 않고요. 어떻게 해결할 수 있을지 문의드립니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
JSP라는게 정확히 어떤 것일까요?
제가 이해한 바로는 Java코드 내에 직접 html을 써서 view를 제공해줬는데 이게 아무래도 하나하나 치는게 불편하다보니 JSP가 등장했고 이를 통해 java에서 html을 쓰는게 아니라 html코드 내에 중요한 부분에만(for를 이용한 동적 활용이나 repository 데이터 조회 등 ?) java코드를 씀으로써 좀 더 코드를 간결하게 만들수 있다는 것 같은데 맞나요 ?? jsp와 타임리프는 둘다 뷰를 그리는 도구이다... ???
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
M1 mac 에서 gradle로 빌드하시려는 분들께 공유 하고싶어 글을 남겨요!
Requirementsstatic/node_module로 package.json에 선언된 의존성을 다운로드 받아야한다gradle build 시 package.json에 선언된 의존성을 확인하고 다시 다운로드 받아야 한다.뭔가 간단하게 끝내고 싶다 !!!Actionhttps://github.com/node-gradle/gradle-node-plugin/blob/master/docs/usage.md다양한 관련 플러그인 들이 있지만, 위의 플러그인을 설치 했습니다.2번의 요구사항은 gradle의 증분 컴파일(?)이 해주는 것 같습니다. (정확하지 않음 추측이에요)3번은 관련 자료를 찾던 도중 processResources 를 발견했고, Copies production resources into the production resources directory. 라고 설명 되어 있습니다.(공식 홈페이지)따라서, npm install 시 node_module 파일을 static 이하로 떨어 뜨리면 되겠구나!그리고 processResources를 "npm install 동작을하는 " Task를 의존하게 하면 되겠구나!-- 주석이 많아 가독성이 떨어지지만, 한번 읽어보시면 더 도움이 될거라 생각해서 위의 깃헙에 있는 주석 그대로 복사 붙여넣기 합니다. 수정한 부분은 nodeProjectDir 부분과processResources.dependsOn 부분 입니다.추가로 package.json 도 아래분이 잘 정리 해주셔서 함께 복사 붙여넣기 합니다.(고맙습니다!!)-인텔리제이 빌드시(gradle로 설정안했을 경우 동작안해요!)-gradle 탭 누르셔서 npm Task 들어오는지 확인해주세요!{ "name": "static", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "@yaireo/tagify": "^3.5.1", "bootstrap": "^4.4.1", "cropper": "^4.1.0", "font-awesome": "^4.7.0", "jdenticon": "^2.2.0", "jquery": "^3.4.1", "jquery-cropper": "^1.0.1", "mark.js": "^8.11.1", "moment": "^2.24.0", "summernote": "^0.8.16" } }plugins { id "com.github.node-gradle.node" version "3.5.0" id 'org.springframework.boot' version '2.7.5' id 'io.spring.dependency-management' version '1.0.15.RELEASE' id 'java' } group = 'me.studyOlle' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } node { // Whether to download and install a specific Node.js version or not // If false, it will use the globally installed Node.js // If true, it will download node using above parameters // Note that npm is bundled with Node.js download = true // Version of node to download and install (only used if download is true) // It will be unpacked in the workDir version = "16.14.0" // Version of npm to use // If specified, installs it in the npmWorkDir // If empty, the plugin will use the npm command bundled with Node.js npmVersion = "" // Version of Yarn to use // Any Yarn task first installs Yarn in the yarnWorkDir // It uses the specified version if defined and the latest version otherwise (by default) yarnVersion = "" // Base URL for fetching node distributions // Only used if download is true // Change it if you want to use a mirror // Or set to null if you want to add the repository on your own. distBaseUrl = "https://nodejs.org/dist" // Specifies whether it is acceptable to communicate with the Node.js repository over an insecure HTTP connection. // Only used if download is true // Change it to true if you use a mirror that uses HTTP rather than HTTPS // Or set to null if you want to use Gradle's default behaviour. allowInsecureProtocol = null // The npm command executed by the npmInstall task // By default it is install but it can be changed to ci npmInstallCommand = "install" // The directory where Node.js is unpacked (when download is true) workDir = file("${project.projectDir}/.gradle/nodejs") // The directory where npm is installed (when a specific version is defined) npmWorkDir = file("${project.projectDir}/.gradle/npm") // The directory where yarn is installed (when a Yarn task is used) yarnWorkDir = file("${project.projectDir}/.gradle/yarn") // The Node.js project directory location // This is where the package.json file and node_modules directory are located // By default it is at the root of the current project nodeProjectDir = file("${project.projectDir}/src/main/resources/static") // Whether the plugin automatically should add the proxy configuration to npm and yarn commands // according the proxy configuration defined for Gradle // Disable this option if you want to configure the proxy for npm or yarn on your own // (in the .npmrc file for instance) nodeProxySettings = ProxySettings.SMART } dependencies { // View Template Engine implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' // Security implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5' //Web implementation 'org.springframework.boot:spring-boot-starter-mail' implementation 'org.springframework.boot:spring-boot-starter-web' implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation', version: '2.7.5' //Persistence implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.mysql:mysql-connector-j' // LomBok compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' // Dev developmentOnly 'org.springframework.boot:spring-boot-devtools' annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' //Test Implementation testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' } tasks.named('test') { useJUnitPlatform() } processResources.dependsOn('npmInstall')
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
태그를 입력할때 insertBefore 에러
저런 에러가 발생하고, 하단에 단어가 추가되지 않습니다. 원인이 무엇인지 모르겠습니다.. (tags.html의 구성은 강사님과 똑같이 하였습니다.) 단어를 추가하려고 할때마다 박스 아래에 단어는 추가되지않고, 같은 에러가 계속 추가됩니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
thymeleaf에서 자바스크립트 인라인을 사용할 때 질문있습니다.
html 내에서 <script th:inline="javascript"></script> 태그를 이용하는 것이 아니라, 자바스크립트 파일을 static 에 있는 외부로 분리하는 경우에 어떻게 하면 변수를 사용할 수 있나요? 예를 들어 static에 js라는 경로를 만들고 그 안에 test.js라는 외부 자바스크립트 파일을 html 내에서 사용하는 경우에 <script th:inline="javascript" th:src="@{/js/test.js}"></script>와 같이 할 수 있습니다. 그런데 이 경우에 앞에서 사용한 변수인 var username = [[${user.username}]]; var age = [[${user.age}]]; 등등을 사용할 수가 없습니다. 어떻게 하면 이 문제를 해결할 수 있나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
웹 계층 개발 fragments 파일들
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) ================================================== (수정)깃헙링크를 안올렸네요. 죄송합니다ㅠ https://github.com/young0264/jpashop 코드 참고 부탁드립니다..! 웹 계층개발 첫강의에서 원하는 view가 안나옵니다.. spring boot 2.7 에서 2.4.1버전으로 다운그레이드도 하였는데 안되네요.. 커뮤니티 게시글에 올라온 버전문제, 강의를 다시 한번씩 살피면서 코드를 전체적으로 한번 다 봤는데 어떻게 손을봐야할지를 모르겠습니다.. 현재 home.html을 열어보면 fragments파일의 footer, bodyHeader , header 파일들이 개별적으로는 실행이 되는데 fragments 의 파일들이 적용이 안되어 있는거보면 이 연결이 안되는게 문제인 것 같아요.. 어디를 수정하면 되는지 한말씀만 주시면 감사하겠습니다 ..!ㅠ (스프링부트는 2.4.1 , bootstrap은 강의와 같은버전입니다) ================================================================ 부트스트랩이 적용안될시 게시판에 올라온 해결책중 두가지를 적용해봤습니다. 1. css폴더에 jumbotron.css 코드를 추가한것(지우고 넣고 두방법 해봣지만 모두 다 안됩니다) 2. 부트스트랩의 버전이 맞지않은경우에 header.html 의 css쪽의 stylesheet 주소를 바꿔줘야 하는경우입니다. 버전이 현재 4.3.1(강의와 같음) 이지만 해상페이지에 들어가서 확인해보고 (같았습니다)수업과 같지만 바꿔주었습니다. https://getbootstrap.com/docs/4.3/getting-started/introduction/ 일단 이 두방법을 시도했기에 참고 부탁드립니다..
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[공유] 인텔리제이 유료버전 인데 타임리프 이동 또는 빨간줄 뜨시는분
인텔리제이 얼티메이트 버전인데 컨트롤러에서 타임리프 링크 안되는 현상 또는 타임리프 리소스에서 빨간불 뜨시는분들 ! 별짓 다해보았지만 Spring boot 버전문제로 보입니다. (강의소스 그대로 버전만 2.7.0 해보니 링크안되고 빨간불 동일하네요) 2022.06.11 기준 2.7.0 버전에서는 안되고, 2.6.8 버전에서는 잘동작합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
intellij 의 thymeleaf 인식오류 인가요?
일단 상품등록하는데 문제는 없습니다. 위와 연결된 Controller에 매핑과 BookForm 설정 똑같이 했는데 강의에 영한님이 한것처럼 html에서 th:object="${form}" 나 th:field="*{name}" 을 command+click 으로 연결된곳으로 갈수도 없고 Cannot resolve 'form' 오류 뜨면서 빨간줄 그어지는데 해결할수 있는 방법있을까요? 저도 그 편한 기능 쓰고 싶습니다 진짜루 ..ㅠㅠ 인텔리제이는 IntelliJ IDEA 2022.1.2 (Ultimate Edition) 쓰고 있습니다.
-
해결됨스프링과 JPA 기반 웹 애플리케이션 개발
지원중단
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. public class SecurityConfig extends WebSecurityConfigurerAdapter 에서 WebSecurityConfigurerAdapter 이게 지원중단이라떠서 더이상 진행이 불가능한데 어떻게 해결할 수 있나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
${#fields.Error()}
안녕하세요 선생님. 구글링을 해도 정보를 찾을수 없어 질문드립니다. 제가 하고싶은건 bindingResult를 통해 등록한 에러 메세지를 자바 스크립트에서 쓰고싶습니다. 아래와 같이 코드를 작성해봤고 여러가지 시도를 해보았으나 작동하지않습니다. controller (등록) bindingResult.reject("loginFail","아이디 또는 비밀번호가 맞지 않습니다."); html (작동하지 않는 코드) <script th:inline="javascript"> alert([[${#fields.errors('*')}]]);</script> 다음과 같은 경우는 잘 작동합니다. controller model.addAttribute("loginFail","아이디 또는 비밀번호가 맞지 않습니다."); html <script th:inline="javascript"> alert([[${loginFail}]]);</script> alert 정상출력. --------------- ${#fields.grobalErrors()} 관련 변수는 자바 스크립트에서 사용이 불가능한가요? 사실 model을 통하여 등록하면 된다지만 코드한줄 줄이고싶은 욕심에 몇시간 알아보다가 해결하지 못하여 이렇게 질문드립니다 ㅠㅠ..
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
똑같은 뷰를 반환하는데도 url에 따라 css가 다르게 적용 되는 이유
<div th:replace="/fragments/header.html :: fragment-header"></div> 이렇게 헤더, nav, 사이드바를 대체하고 있는데요 도메인/edit 에서는 잘 적용되던 html,css 들이 도메인/edit/1 등등 이렇게 구체적으로 들어가면 100% 똑같은 뷰를 반환해도 절대 적용이 안됩니다.. 5시간째 이유를 못찾고 있습니다 @GetMapping("/project/edit/1")public String Edit1(Model model){ //1번 return "editProject";}@GetMapping("/edit")public String Edit2(Model model){ //2번 return "editProject"; } 1번과 2번의 뷰가 각각 1. 2. 이렇게 나타납니다. 똑같은 뷰를 써도 저렇게 나오는 이유가 무엇인가요? Edit1(), Edit2()는 필수부분만 캡처한겁니다 똑같은 뷰를 반환하는데도 url에 따라 css가 다르게 적용 되는 이유가 무엇일까요?? 혼자서해보려했는데 너무 안되서 질문드립니다. --헤더 내부-- <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"> http://localhost:8080/project/edit/bootstrap/css/bootstrap.min.css 잘못된 css 경로 -< 이렇게 가네요 http://localhost:8080/bootstrap/css/bootstrap.min.css 가야하는 css 경로 빨간색 경로가 안붙게 하려면 어떻게 하나요?
-
해결됨스프링과 JPA 기반 웹 애플리케이션 개발
(응용) 프로젝트 진행 전 상수-Constants 구성 에 관한 질문입니다.
자주 쓰이고, 오타가 날법한 String 을 모아 아래 처럼 상수화 했습니다. 상수패키지 com.studyolle.core.constant.* 이후 Controller , Test 등에서 아래와 같이 사용중입니다. 질문입니다 Enum 으로 관리 하려고 했지만, 컨트롤러-핸들러 의 @GetMapping( Enum.URI.name() ) 과같은 선언도 불가능 하고, 단순 값 참조를 Enum .name() 이라던지, Enum .custom() 과 같이 덕지덕지 메서드가 붙게되어, 심플하게 하고자, Enum 은 사용하지 않았습니다. 그러나 이렇게 static final 필드로 관리하다보면, 언젠가 양이 많아 질탠데, 이럴 경우는 또다시 나누어야 될거라 생각이 듭니다만.. 이런 일반적인 방식 보다 효과적으로 관리하는 ( Map 을 쓴다던지, 특정 패턴이라던지) 방법이 있을까요? 상수 관리는 이런 방향이 괜찮았다.. 라는 사례가 궁금합니다. 읽어주셔서 감사합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
thymeleaf th:each 테이블에 새로운 object 넣고싶습니다.
테이블을 동적으로 만들고 싶어서 이것저것 하다가 질문드립니다... <html> each로 테이블을 구성하였고요 비동기 통신을 통해서 아래와 같은 object를 새로 받아왔습니다. 테이블 그리기 위해 넣는 orderGroupList > orderList가 있고요 페이징처리와 통신결과를 가져오는 paginVO, resultVO가 있습니다. 이러한 object를 현재 html에 구성된 each에 넣을 수 있는 어떤 방법이 있나요?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
여태껏 들었던 강의 중 가장 불친절 한 강의
이 분은 진짜 글을 남겨야겠네요. 기본 적으로 강의 할 때 목소리 톤이 최소한의 겸손이 안되어 있는 느낌. "이건 당연히 아셔야 해요", "찾아보셔야 해요" <-- 이런 말투들도 최대한 이해하려고 노력 했음. 근데 가관은 bootstrap 코드를 자기가 copy&paste 해서 옮기는데 화면에 보여주지도 않음. 그거 하나하나 보면서 sign-up.html 파일 내용 기입하고 있어서 힘들었는데... 질문 게시판 답변 보니...그제서야 거기서 자기 git의 commit check out해서 옮기라네...참... 아니 강의를 하면서 그 때 그 때 말을 해주든가.. 불친절하고, 내용도 그냥 다 알아야 하는 것들 혼자 한 번 적용해보는 느낌. 새로운 내용이 나오면 그 내용을 친절하게 알려주면서 강의 노트에 있는 것도 아니고.... 그냥 말로 대충 지나가듯이 설명.... 좀 겸손하지 않으신 듯 해요. 강사 자체가...
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 목록 뷰에서 사용한 코드 관련 질문입니다.
강의를 다시 복습하면서 코드를 다시 유심히 보다가 발견하지 못한 부분을 발견해서 질문드립니다 주문 목록을 타임리프를 이용해서 뿌리는 코드는 다음과 같은데요 <tr th:each="item : ${orders}"> <td th:text="${item.id}"></td> <td th:text="${item.member.name}"></td> <td th:text="${item.orderItems[0].item.name}"></td> <td th:text="${item.orderItems[0].orderPrice}"></td> <td th:text="${item.orderItems[0].count}"></td> <td th:text="${item.status}"></td> <td th:text="${item.orderDate}"></td> <td> <a th:if="${item.status.name() == 'ORDER'}" href="#" th:href="'javascript:cancel('+${item.id}+')'" class="btn btn-danger">CANCEL</a> </td> </tr> 여기서 의문점이 Order와 Member는 다대일 관계이기 때문에 Order 리스트에 대해서 Order id와 Member 정보는 저렇게 출력하는게 가능한데 Order와 OrderItem은 1대다 관계인데 orderItems[0] 형태로 0 인덱스만 주었는데 출력이 되어있는데요 orderItems는 리스트인데 인덱스는 0만 주어서 출력하는 부분에서 타임리프 가이드를 보긴 했는데 이런 케이스에 대해서는 왜 이런식으로 코드가 나오는지 이해 안돼서 질문드립니다. 왜냐하면 저렇게 하면 하나의 Order에 대해서 Orderitem이 하나 밖에 나오지 않아서요 검증쿼리는 다음과 같이 던져서 검증 했구요 SELECT M.NAME, O.ORDER_ID, I.ORDER_PRICE, I.COUNT, IT.NAME FROM ORDERS O , ORDER_ITEM I , MEMBER M , ITEM IT WHERE 1=1 AND O.ORDER_ID = I.ORDER_ID AND M.MEMBER_ID = O.MEMBER_ID AND IT.ITEM_ID = I.ITEM_ID ORDER BY M.NAME ASC, O.ORDER_ID ASC, IT.NAME ASC, I.COUNT ASC 출력결과는 다음과 같습니다. 저런 상황이 발생하지 않도록 알맞게 처리하기 위해서는 view에 뿌려줄 수 있도록 적절한 DTO로 변환해서 뿌려줘야하는 것이 맞는지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
thymeleaf를 사용할때 Controller와 RestController의 차이 질문이요
thymeleaf 템플릿을 사용할 때 @Controller 사용하면 String으로 반환해서 페이지로 이동하는데 @RestController를 사용하면 String으로 반환할 때페이지로 이동을 못합니다... 그 이유가 무엇이고 어떻게 해결하면 좋을까요? 참고로 hello.html은 templates에 있습니다.. @Controller public class PostController { @GetMapping("/test") public String Test(Model model){ model.addAttribute("data","테스트입니다."); return "hello"; } } 여기서 아래처럼 RestController를 사용하면 페이지를 이동못하고 hello만 반환한다. @RestController public class PostController { @GetMapping("/test") public String Test(Model model){ model.addAttribute("data","테스트입니다."); return "hello"; } } 감사합니다.