#NO.1
$(window).scroll(function () {
if ($(window).scrollTop() >= $(document).height() - $(window).height()) {
//Add something at the end of the page
});
회원 관리 페이지를 만드는데 스크롤로 페이징 처리를 하려고 시도했다. 하루 동안 붙잡고 있었지만 제대로 작동 되지 않았다. 처음 시도는 틀을 가지고 노는 것이었다. 하지만 회원 관리 게시판을 로딩 시켜야하는데 로딩시켜야 할 페이지가 박스 안에 담겨 있어 위에 보이는 로직과는 차이를 가지고 있다. 그 차이를 발견하지는 못했고 현재 진행하고 있는 프로젝트의 필요 부분을 모두 만든 후에 개선해보고자 한다.
$(window) 이하 윈도 창
간단한 설명을 하게 되면 $(window).scroll(function())은 윈도우 창에서 스크롤이 처음으로 실행되 었을 때 아래 함수를 실행 시킨다는 의미이다. 그 이후 윈도 창 scrollTop() 함수를 실행해서 윈도 창의 최대 높이를 측정한다.
여기서 scrollTop()을 잠시 보고 넘어가보자.
scrollTop() : Get the current vertical position of the scroll bar for the first element in the set of matched elements or set the vertical position of the scroll bar for every matched element
라고 적혀있다. 대략적으로 해석해보면 스크롤 바의 현재 수직 위치를 반환해준다는 것인데. 이렇게만 보면 이해하기가 조금은 힘들다.
그래서 하나 정도의 예를 더 들어 놨는데 아래와 같다.
The vertical scroll position is the same as the number of pixels that are hidden from view above the scrollable area. If the scroll bar is at the very top, or if the element is not scrollable, this number will be 0.
수직 스크롤 위치는 스크롤이 가능한 영역 넘어 숨어 있는 부분의 픽섹들의 수와 같다. 만약 스크롤 바가 가장 위에 있거나 요소가 스크롤이 불가능하다면 해당 값은 0이 된다. 라고 적혀 있다.
간단하게 scrollTop( value )도 생각을 해보면 좋을 것 같다.
이유는 스크롤 탑을 이용해서 함수를 실행 시키면 새로운 값들을 계속 가져오게 된다. 그러면서 페이지가 새로고침되게 되는데 스크롤이 가장 상단으로 복귀되게 된다. 이런 상황들을 대비하기 위해 scrollTop(value) 값을 지정해 놓으면 위치값이 고정되게 되며 다시 스크롤을 내릴 필요가 없게 될 것이라는게 나의 생각이다.(아직 실행해보기 전)
회원 관리 페이지가 모두 마무리되고 기본적인 기능들이 구현되고나면 다시 시도해봐야겠다.
#NO.2
String.valueOf()
@Override
public int addPost(HashMap<String, String> params) throws Throwable {
String tag = params.get("tag"); // 키가 "tag"인 것의 값을 문자열 tag에 담는다.
String[] tagArt = tag.split(","); // 문자열 tag를 ',' 기준으로 나누어 배열에 담는다.
for(int i = 0; i < tagArt.length; i++) { // 0부터 배열 tagArt 크기만큼 돌린다.
String tagName = tagArt[i]; // 문자열 tagName에 배열 tagArt[i]의 값을 담는다.
HashMap<String, String> tag2 = sqlSession.selectOne("Post.getTag", tagName); // 문자열 tagName을 getTag쿼리 값(#{tagName})으로 넣고 TAG_NO을 받아온다.
// tag2의 키 : TAG_NO, 값 : 숫자
if(tag2 != null) { // 등록되어 있는 태그이면
params.put("TagNo", String.valueOf(tag2.get("TAG_NO"))); // tag2에서 키가 "TAG_NO"인 것의 값을 params의 키가 "TagNo"인 것의 값에 집어넣는다.
sqlSession.insert("Post.addMiddleTag", params); // 중계 테이블에 #{postNo}, #{TagNo}를 집어넣는다.
} else { // 등록되어 있지않은 태그이면
sqlSession.insert("Post.addTag", tagName); // 태그 테이블에 문자열 tagName을 집어넣는다.
tag2 = sqlSession.selectOne("Post.getTag", tagName); // 문자열 tagName을 getTag쿼리 값(#{tagName})으로 넣고 TAG_NO을 받아온다.
// tag2의 키 : TAG_NO, 값 : 숫자
params.put("TagNo", String.valueOf(tag2.get("TAG_NO"))); // tag2에서 키가 "TAG_NO"인 것의 값을 params의 키가 "TagNo"인 것의 값에 집어넣는다.
sqlSession.insert("Post.addMiddleTag", params); // 중계 테이블에 #{postNo}, #{TagNo}를 집어넣는다.
}
}
추가하는 페이지에서 태그를 추가하는 기능을 구현하는 과정에서 태그가 있고 없음에 따라 달리 진행되는 코드를 짜게 되었다. 로직의 흐름도를 이용해서 여차 저차 말로 사고의 과정을 짚어가며 진행해 보며 거의 마무리까지 가게 되었다. 하지만 toString.에서 null 포인트 exception과 비슷한 에러를 맞닥뜨리게 되었다.
여기서 문제는 데이터에서 받아온 값들 중에 null이 포함되어 있다면 toString 자체는 null을 문자열 'null'로 변환 되는게 아니라 에러로 간주한다. 하지만 String.valueOf는 null을 그저 문자열 null로 인식하여 반환해준다,
따라서 현재까지는 데이터에서 받아오는 값들 중에 null이 포함되어 있다면 String.valueOf로 받으면 될 것 같다.
#NO.3
WM_CONCAT()와 LISTAGG(원하는 컬럼, '구분자') WITHIN GROUP(ORDER BY 원하는 컬럼)
이 두가지를 사용하면 하나의 작품에 있는 여러개의 태그를 하나의 행에 모아서 볼 수 있다.
왠만하면 데이터를 가공해서 가져오고 다 가져온다음에 원하는 형태로 가공해서 사용하는 능력을 키울 수 있는 좋은 기회였다. WM_CONCAT()은 사용하지 못햇는데 그 이유는 ORACLE11g에서는 사용하지 못하는 함수이기 때문이었다.
어제 시도 했던 것들이 많았지만 실행 시킨 것들은 크게 많지 않았다. 우선 현재 진행하고 있는 회원관리 페이지에서 상세보기 등록 수정 삭제를 이번주 안으로 끝내느 것이 나의 목표다. 그러면 오늘부터 다시 시작이다. 오케이 고고!!
그리고 개발일지에 이슈가 있는 것들이 있으면 항상 작성하는 이런 행위 자체를 꼭 습관으로 만들어야겠다.
'about. What I learned > about.Study by myself' 카테고리의 다른 글
Tomcat 비정상 종료시 발생하는 에러에 대하여 (0) | 2021.07.17 |
---|---|
DOM으로 생성된 HTML 기능 사용하기 (0) | 2021.07.12 |
무한 스크롤 구현하기 (0) | 2021.07.06 |
radious 활용하기 (0) | 2021.06.25 |
로딩화면 만들기 (0) | 2021.06.20 |