정리노트/팀프로젝트

[팀 프로젝트] 24.02.27. 노트

망고고래 2024. 2. 27. 18:42

오늘 할일

1. 리뷰 출력

2. 리뷰 수정

3. 리뷰 삭제

 

 

1. 폼-컨트롤러 매핑: GET으로 전송 정보 확인하기

어제 작성한 코드

<%
	int verify = (int)request.getAttribute("verify");
	if(verify == 1){
%>
		<div name="리뷰" class="p-5" style="width: 32%; margin-right: 1%; border-radius: 10px; height: 400px; padding-top: 5px !important;">		
			<p style="margin-bottom: 5px">나의 리뷰</p>
			<c:url value="/hotels/review/update" var="update_url"/>
			<form:form modelAttribute="NewReview" class="form-horizontal" action="${update_url}">
				<div class ="star_rating">
	            	<c:forEach begin="1" end="5" var="i">
	                	<span class="star ${i <= myReview.star ? 'on' : ''}" value="${i}"></span>
	                </c:forEach>
					<!-- hidden input 추가 -->
					<input type="hidden" id="starValue" name="star" />
				</div>
				<form:textarea path="text" class="star_box" placeholder="리뷰 내용을 작성해주세요. (최대 200자)" maxlength="200" value="${myReview.text}" />
				<input type="submit" class="btn02" value="리뷰 등록"/>	
			</form:form>				
		</div>

<%
	}

에서 textarea가 출력이 되지 않았다. 그리고 새로 입력한 값도 컨트롤러에 전달되지 않았다.(확인해보니 위쪽에 다른 <form:form> 태그가 있었다. 그래서 문제가 생기지 않았나 싶다.)

그래서 <form:form>태그 대신에 <form> 태그로 변경했다. 그리고 메서드 동작에 필요하지만 현재 폼에서 편집하지 않는 요소들을 hidden으로 아래에 추가했다.

<%
	int verify = (int)request.getAttribute("verify");
	if(verify == 1){
%>
		<div id="리뷰" class="p-5" style="width: 32%; margin-right: 1%; border-radius: 10px; height: 400px; padding-top: 5px !important;">		
			<p style="margin-bottom: 5px">나의 리뷰</p>
			<form action="review/update" method="POST" class="form-horizontal">
				<div class ="star_rating">
	            	<c:forEach begin="1" end="5" var="i"><!-- value="${i}" -->
	                	<span class="star ${i <= myReview.star ? 'on' : ''}" ></span>
	                </c:forEach>
					<!-- hidden input 추가 -->
					<input type="hidden" id="starValue" name="star" />
				</div>
				<textarea name="text" class="star_box" placeholder="리뷰 내용을 작성해주세요. (최대 200자)" maxlength="200">${myReview.text}</textarea>
				<input type="hidden" name="mem_id" value="${myReview.mem_id}"/>
				<input type="hidden" name="contentSeq" value="${myReview.contentSeq}"/>
				<input type="submit" class="btn02" value="리뷰 수정"/>
			</form>				
		</div>

<%
	}

처음에는 hidden에 도메인의 모든 변수를 다 지정했다. 그러다보니 name이 중복되어서 값이 제대로 담기지 않았다.

이럴 때는 form의 method를 get으로 변경해서 url을 통해 전달하는 값을 확인할 수 있다. 문제가 되었던 상황의 파라미터값은 다음과 같다.

http://localhost:8080/pet_hug/hotels/review/update?
star=
&text=update+test+5
&mem_id=id2
&star=5
&text=update+test+4
&contentSeq=23
&rev_num=9
&mem_nickname=%EA%B3%A0%EC%96%91%EC%9D%B4
&rev_date=2024-02-26+10%3A47%3A29

star와 text가 두 번씩 나오고 있다. 중복되는 변수와 메서드 실행에 필요없는 변수들을 제거하고 위와 같은 코드를 작성했다.

 

 

문제점

1)<form:form> 태그에서 왜 ModelAttribute를 통해 값이 전달되지 않았는지 모름

2)어제 테이블의 컬럼명을 변경했는데 Repository에서 update 할 때 변경 전 이름을 참조하려고 함. 쿼리는 진작에 수정했는데 어디서 자꾸 예전 컬럼명을 찾는 건지 알 수가 없다...일단은 임시로 예전 컬럼명으로 테이블에 컬럼을 하나 더 만들었다.

 

 

 

 

앞으로 할 일

1. 지도 API 사용해서 여행코스 만들기

- 코스간 이동 거리

- 필요 비용

- 예상 유류비

- 여행지 비용 발생시 계산해서 총액

 

네이버 길찾기 API

driving (ncloud-docs.com)

 

driving

 

api.ncloud-docs.com

 

2. 고속도로 휴게소 표시

 

 

내일 할일

여행코스 만들기

- 1단계: 상세정보 없이 코스 목록 제작

- 2단계: 상세정보 삽입

 

코스 목록: 로그인 필요

숙소/여행지 목록의 상세정보에서 코스에 추가하기를 넣을 수 있으면 좋겠다

→1일차/2일차 이런 식으로 하면 어디에 넣을지 정할 수 있어야 함

코스 만들기 코너에서는 지도에 카테고리별로 마크가 뜨고 거기서 상세정보로 이동하거나 코스에 추가할 수 있음

 

댕댕여지도: 3일차까지만 만들 수 있음