Open sehyeogi365 opened 4 months ago
정렬모달/필터모달 버튼
정렬모달/필터모달 모달창
lodgingDTO에다가 가격, 평점 이런것도 추가해보기 댓글갯수라던가
한마디로 그거랑 똑같다. 시스템 셀렉터로 무슨 시스템 조회할건지 선택하는거랑 다를게 없다. 매퍼에서도 if문 넣어서
그렇게 조회하고 조인하고 그렇게
lodgingDTO 에다가 각 변수별로 게터세터 추가및 모달창도 꾸미는중이다. 그리고 숙소카드에 가격, 평점, 리뷰 갯수 이런것도 표시가 되어야 그렇게 정렬 모달 사용이 가능하다.
거기다가 정렬 타입도 컨트롤러로 요청해야 하니 그렇게 dto에 추가해야할듯 싶다.
로징비오에서 숙소리스트 반복문내 LodgingDetail lodgingDetail = new LodgingDetail(); 없애고 dto 파라미터로 선언시 왜 같은 숙소가 뜨는지 파악해보기
일단 모달창에서 라디오 박스 선택후 적용 되었을시 요청이 되어야 함 거기부터 되게 해보기
int userId = (Integer)session.getAttribute("userId"); //dibs detail 이랑 자꾸 헷갈려서 그런듯.
String sortType = lodgingDetail.getSortType();
컨트롤러서부터 sortType이 안들어온다는것은
js딴에 문제가 있다는 뜻
bo, dao, mapper를 각각 생성했다.
그런데 starpoint만 널이 뜨는데 예외처리도 안되는 상황..
for(LodgingDetail lodging:lodgingList) {
//숙소카드 한장에 유저정보가 들어갈일은 없다.
boolean isDibs = dibsCheckBO.isDibs(userId, lodging.getId());
//이거와 관련된 비오 하나를 차라리 더 팔것.
//댓글갯수,평점,가격, 정렬 방식 비오를 파기,
//int commentCount = //댓글 갯수
int price = lodgingDAO.selectSingleRoomPrice(lodging.getId());//싱글룸 가격
CommentDetail commentDetail = new CommentDetail();
Integer commentCount = commentDAO.selectCommentCount(commentDetail);// 댓글 갯수
Double startPoint = commentDAO.selectStarPoint(commentDetail);//댓글 평점
if(commentCount == null){
commentCount = 0;
}
/*
if(startPoint == null){
startPoint = "0";
}*/
lodgingDetail = new LodgingDetail(); // 이것을 반복문 밖에 파라미터로 선언 하면 자꾸 같은 숙소가 나옴
//현재 뜨는 500에러 여기서 로징아이디가 안불러와지고 있단뜻인듯.
//그 숙소리스팅에 들어갈 것들.
//lodgingDetail.setUserId(user.getId());//유저아이디?
lodgingDetail.setId(lodging.getId());//로징아이디
lodgingDetail.setRoomName(lodging.getRoomName());// 숙소명
lodgingDetail.setAreaName(lodging.getAreaName()); // 지역명
lodgingDetail.setLevel(lodging.getLevel());//성급
lodgingDetail.setImagePath(lodging.getImagePath());// 숙소 사진
lodgingDetail.setDibs(isDibs);// 찜여부
//로징아이디 로징 룸네임 성급이미지 그리고찜여부
//여기서 dto로 댓글갯수,평점,가격, 정렬 타입 추가
lodgingDetail.setCommentCount(commentCount);
//lodgingDetail.setAvgStarPoint(startPoint);
lodgingDetail.setPrice(price);
lodgingDetail.setSortType(lodgingDetail.getSortType());
//nullpointException이 뜬다. 여 값이 널값이란뜻 왜 널일까
lodgingDetailList.add(lodgingDetail);
}
return lodgingDetailList;
}
이젠 price만 지운상태서 하니 잘 뜨는듯.
public List
List<LodgingDetail> lodgingList = lodgingDAO.selectLodgingListByArea(areaName, lodgingDetail.getSortType());
List<LodgingDetail> lodgingDetailList = new ArrayList<>();
for(LodgingDetail lodging:lodgingList) {
//숙소카드 한장에 유저정보가 들어갈일은 없다.
boolean isDibs = dibsCheckBO.isDibs(userId, lodging.getId());
//이거와 관련된 비오 하나를 차라리 더 팔것.
//댓글갯수,평점,가격, 정렬 방식 비오를 파기,
//int commentCount = //댓글 갯수
//int price = lodgingDAO.selectSingleRoomPrice(lodging.getId());//싱글룸 가격
CommentDetail commentDetail = new CommentDetail();
Integer commentCount = commentDAO.selectCommentCount(commentDetail);// 댓글 갯수
Double startPoint = commentDAO.selectStarPoint(commentDetail);//댓글 평점
if(commentCount == null){
commentCount = 0;
}
if(startPoint == null){
startPoint = 0.0;
}
lodgingDetail = new LodgingDetail(); // 이것을 반복문 밖에 파라미터로 선언 하면 자꾸 같은 숙소가 나옴
//현재 뜨는 500에러 여기서 로징아이디가 안불러와지고 있단뜻인듯.
//그 숙소리스팅에 들어갈 것들.
//lodgingDetail.setUserId(user.getId());//유저아이디?
lodgingDetail.setId(lodging.getId());//로징아이디
lodgingDetail.setRoomName(lodging.getRoomName());// 숙소명
lodgingDetail.setAreaName(lodging.getAreaName()); // 지역명
lodgingDetail.setLevel(lodging.getLevel());//성급
lodgingDetail.setImagePath(lodging.getImagePath());// 숙소 사진
lodgingDetail.setDibs(isDibs);// 찜여부
//로징아이디 로징 룸네임 성급이미지 그리고찜여부
//여기서 dto로 댓글갯수,평점,가격, 정렬 타입 추가
lodgingDetail.setCommentCount(commentCount);
lodgingDetail.setAvgStarPoint(startPoint);
//lodgingDetail.setPrice(price);
lodgingDetail.setSortType(lodgingDetail.getSortType());
//nullpointException이 뜬다. 여 값이 널값이란뜻 왜 널일까
lodgingDetailList.add(lodgingDetail);
}
return lodgingDetailList;
}
CommentDetail commentDetail = new CommentDetail(); Integer commentCount = lodging.getCommentCount();//commentDAO.selectCommentCount(commentDetail);// 댓글 갯수 Double avgStarPoint = lodging.getAvgStarPoint();//commentDAO.selectStarPoint(commentDetail);//댓글 평점 이러니 디버깅할때 당연히 0이 들어올수 밖에..
Integer commentCount = lodging.getCommentCount();//commentDAO.selectCommentCount(commentDetail);// 댓글 갯수 Double avgStarPoint = lodging.getAvgStarPoint(); 수정해보기
commentDetail이 아닌 lodgingId 이렇게 넣어야 할듯
아직도 Invalid Bound 문제로 고생중이고
mysql에서
SELECT
*
FROM
room
WHERE
lodgingId
= 2
했을때 객실 하나만 뜨고 이런것도 의아하다.
이제보니 public List
여기서 지역명만 불러올게 아니라, 싱글룸 가격, 댓글 갯수, 댓글 평점도 불러와야 할듯.
댓글갯수와 댓글 평점은 잘나온다..
//댓글 개수 public Integer selectCommentCount(@Param("lodgingId") int lodgingId);
//댓글 평균평점
public Double selectStarPoint(@Param("lodgingId") int lodgingId);
<select id = "selectStarPoint" parameterType="int" resultType="double">
SELECT
AVG(`starpoint`) AS `avgStarPoint`
FROM
`comment`
WHERE
`lodgingId` = #{lodgingId}
</select>
객실리스트에서 각각 객실가격은 어떻게 불러왔는지 함 봐보기
// 로징아이디 별 객실
public List
Room room = new Room();
List
Integer price = 0;
//객실 정보가 있을때
if(roomList != null && !roomList.isEmpty()){
price = roomList.get(0).getPrice(); // 첫번째요소인 싱글룸 가격
} else {
System.out.println("Lodging ID: " + lodging.getId());
}
<a href="/lodging/lodginglist/view?area_name=jeolla&sortType=" class="box-profile">
<img class="profile my-3" width = "" src="https://cdn.pixabay.com/photo/2018/08/23/22/18/jeonju-3626873_960_720.jpg" alt="전라">
</a>
</div>
<div class="box-body d-flex justify-content-center align-items-center">
<a href="/lodging/lodginglist/view?area_name=jeolla&sortType=" class="font-weight-bold text-dark">전라</a>
</div>
</div> 이렇게 메인페이지 url링크에 sortType 파라미터 추가 하니 sortType 400에러 해결
아직 라디오 버튼 선택시 정렬에러가 뜨는상황..
//정렬모달 $("input[name='sortOrder']").on("change", function() { let order = $(this).val(); let areaName = $("#areaName").text();
alert("ㅇㅇ정렬" + order);
$.ajax({
type : "get"
, url : "/lodginglist/view"
, data: {sortType : order, area_name : areaName}
, success:function(data){
if(data.result == "success"){
$('#sortModal').modal('hide');
location.reload();
} else {
alert("정렬 실패");
}
}
, error:function(){
alert("정렬 오류");
}
});
});
아직도 정렬에러가 뜨는중 그래서 왜그런가 보니까 맨첨에 컨트롤러서부터 sortType=""로 지정되는데 비오까지 다돌고 컨트롤러로 오니까 sortType = null로 됨
아예 컨트롤러, 서비스임플을 하나 더 파는것도 방법일듯.
: No mapping for GET /lodginglist/view 에러가 뜨는중
웹콘솔에선 404
그리고 lodgingDetail = new LodgingDetail(); 이렇게 반복문 밑에서 한번도 로징디테일을 초기화 해주고 있으니 당연히 sortType이 널이 들어가야 정상아닐까? 거기다가 컨트롤러에서 받은 sortType을 비오에서 안불러오고 로징디테일 초기화해서 셋팅된 sortType을 불러올려고 하니. 당연히 널이뜰수밖에
우선은 이렇게 해서 sortType=""로 넣는데까지 성공함
그런데 아직도 정렬오류다.
http://localhost:8080/lodging/lodginglist/view?area_name=busan&sortType=starPointOrder 이렇게 인위적으로 했을때 에러가 뜸. ㅇㅇ.. Unknown column 'avgStarPoint' in 'order clause'
이것도 문법적으로 잘못됨 when test ="sortType = 'commentOrder'"
서브쿼리에서 생성한 commentCount 컬럼을 메인 쿼리에서 직접 사용할 수 없기 때문 이라는데..
즉 서브쿼리 변수를 바로 활용 못한다는건데..
이렇게 바꿈
당연한거지만 이렇게 서브쿼리 없애서 해도 숙소리스트에 평점, 댓글갯수, 싱글룸 가격이 나온다. 차피 서비스임플에서 제너레이트 했기에
그게 아니라면 서브쿼리를 타는것이 아닌 서비스임플에서 정렬타입이 뭐냐에 따라 다른 다오를 타게 만들거나 하는 방법이 있긴하다..
우선 매퍼에 널일때 조건도 추가해봄
우선 alert창 지역명에서 이상하게 뜬다. let order = $(this).val(); let areaName = $("#areaName").text();
alert("정렬" + order);
alert("지역명" + areaName);
strong꺾새 따로 분리
역시 지역명이 안잡혀서 뜨는 오류다 그럼 왜그럴까 콘솔로그,alert둘다 안뜨는데..
jstl 변수 값을 js로 불러오기
div id = "areaName" data-area-name="${lodging.areaName}">
let areaName = $("#areaName").data("area-name").trim();//jstl 변수 js 변수로 불러오기
그리고 현재 404에러가 뜨는원인 url 경로가 이상하게 다르게 들어온다.
$.ajax({ type : "get" , url : "lodging/lodginglist/view" 이렇게 수정하기
순서꼬여서 나오는건 어떻게 해결할건가?
설마 여기 data 순서도 바꿔야 url이 제대로 찍히나? , data: {sortType : order, area_name : areaName}
이렇게 순서는 제대로 들어가지는데 왜 또 url이 중복되는가
최종적으로 url 중복안되게, 파라미터 순서 맞게, lodging/lodginglist/view 형식으로 잘 출력이 됐는데 500에러 $("input[name='sortOrder']").on("change", function() { let order = $(this).val(); let areaName = $("#areaName").data("area-name").trim();//jstl 변수 js 변수로 불러오기 console.log("정렬: " + order); console.log("지역명: " + areaName); alert("정렬: " + order); alert("지역명: " + areaName); $.ajax({ type : "get" , url : "/lodging/lodginglist/view" , data: {area_name : areaName, sortType : order} , success:function(data){ if(data.result == "success"){ $('#sortModal').modal('hide');
} else {
alert("정렬 실패");
}
}
, error:function(){
alert("정렬 오류");
}
});
});
이 500에러 가 서브쿼리로 생성한 별칭을 사용할수 없다 즉 ORDER BY 구문을 어떻게 해야할것인데 서브쿼리문 자체를 집어넣는것도 방법
최근 매퍼 수정
이렇게 매퍼 고치고 실행해보니 이번엔 정렬실패가 뜨는상황 500에러 이런건 안뜬다.
302 found라고뜨는데
@GetMapping("/main/view") public String mainPage(Model model, LodgingDetail lodgingDetail) {
이렇게 dto 선언후 adminId를 파라미터로 하는게 아닌 id로 숙소리스트 조회하게끔 변경