인프런 커뮤니티 질문&답변

이종윤님의 프로필 이미지
이종윤

작성한 질문수

실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터

페이징 작업에 대한 사항 알려 주실 수 있나요?

해결된 질문

작성

·

405

0

강의 모두 잘 들었습니다.

페이징 작업에 대한 사항은 없어서 이렇게 질문 올립니다. 인터넷에 나와있긴 하던데 강의할 때 사용한 코드에 페이징 작업이 어떻게 들어갈지 궁금하여서요.

참고할만한 문서나 링크로도 답변해주시면 감사합니다.

답변 1

0

kitdow.on님의 프로필 이미지
kitdow.on
지식공유자

안녕하세요. 킷도우입니다.

강의 잘 들어주셨다니 감사합니다. :)

 

일단 저의 경우 사내 업무용 넥사크로 시스템 운영 경험이 2차례 정도 있는데

첫 번째 시스템의 경우 최초 구축하면서 페이징 처리를 했으나 조회 속도 이슈로 인해 운영하면서 전부 페이징 처리를 걷어냈던 경험이 있고 , 두 번째 시스템에서는 애초에 페이징 적용을 안 했습니다.

 

보통은 넥사크로를 사내 업무용으로 많이들 쓰고 테이블 데이터 양이 많다 보면 데이터 조회 시 불편한 점으로 인해 페이징 처리를 안 하지 않나 생각됩니다. 그래도 어떤 상황이 생길지 모르니 학습 차원에서 실습을 해 보는 것은 좋은 것 같습니다:)

 

아래 페이징 처리 관련 잘 정리된 내용이 있어 링크 공유드립니다.

아래 소스를 활용해 제가 직접 적용해 보니 변환만 잘 하면 정상 작동하는 소스입니다.

그리고 강의 내용을 완벽히 숙지하셨다면 아래 링크를 보고 충분히 하실 수 있는 개발이라고 생각합니다.

http://tobetong.com/?p=7917

 

커스터마이징하는 방법에 몇 가지 팁을 드려보면 아래와 같습니다.

▶paging.xfdl -> OB_001.xfdl

① 조회 버튼

-> id : btnSearch

② 데이터 조회 Grid

-> id : grd_ordList

-> binddataset : ds_list

③ 페이징 처리용 화면 Div

-> id : Div00

-> url : cmm::paging_comm.xfdl

(Board 말고 cmm 폴더에 xfdl파일을 만들어주세요. 공통 모듈 성격이라 cmm에 넣는 것이 좋습니다.)

이 뒤 나오는 소스는 OB_001.xfdl에 적절히 배치 시켜주세요.

 

▶ paging_comm.xfdl

넥사크로 컴포넌트를 직접 그려주시고 ID를 부여해주세요.

강의에서 배웠던 내용을 토대로 그리면 충분히 하실 수 있습니다!

아래 소스는 전부 그대로 복사해서 적절히 배치 시켜주세요.

 

▶ page_sample.jsp

저희는 이 부분을 UiadapterBoardServiceImpl.java에 구현해야 합니다.

.jsp 소스를 .java로 변환해 주시면 됩니다.

예제 소스에는 for문으로 data를 임의로 만들지만 저희는 주문 테이블로부터 pageNumber와 페이지에 표시할 row 수를 토대로 값을 select 해야합니다.

이 부분은 mybatis 문법이 별도로 들어가야 하는데 아래 문법 참조하시면 도움 되실겁니다. :)

기존에 주문 조회 select문을 한번 감싸서 아래와 같이 적용하시면 됩니다.

SELECT *

FROM (기존에 주문 조회 쿼리 그대로 복붙) A

<choose>

<when test = "pageNum ==1 ">

WHERE <![CDATA[A.RNUM <= #{rowCount}]]>

</when>

<otherwise>

WHERE <![CDATA[A.RNUM > (#{pageNum}-1)*#{rowCount} AND A.RNUM <= #{pageNum}*#{rowCount}]]>

</otherwise>

</choose>

아래는 제가 적용한 결과 화면입니다. 한 페이지당 노출할 row 수를 5개로 설정해 보았습니다.

image

진행 하시다가 막히시면 댓글로 언제든 문의 주세요 ㅎㅎ

감사합니다:)

 

혹시 스프링 컨트롤러에서 DataSet 뿐만 아닌 넥사크로에서 던진 param 도 받으려면 어떻게 해야할까요?

kitdow.on님의 프로필 이미지
kitdow.on
지식공유자

안녕하세요! 킷도우입니다:) 문의하신 사항 답변드립니다.

 

넥사크로에서 스프링 컨트롤러로 Request를 보낼 땐 넥사크로 내장 함수인 this.gfnTransaction 함수를 이용합니다. 이 함수의 매개변수를 보면 본 강의 기준 strAvg 라는 매개 변수가 있습니다.

 

해당 변수를 이용하시면 DataSet이 아닌 타입으로도 전송이 가능합니다.

넥사크로 소스와 컨트롤러 소스에 아래와 같이 적용해 보시면 되실겁니다.

 

  1. 넥사크로 소스

var strSvcId = "selectOrdList";

var strSvcUrl = "selectOrdList.do";

var inData = "ds_searchList=ds_searchList";

var outData = "ds_list=ds_list";

var today = "20231122";

var strAvg = "date="+today+""; // 또는 var strAvg = "data=20231123";

var callBackFnc = "fnCallback";

this.gfnTransaction(strSvcId ,

strSvcUrl ,

inData ,

outData ,

strAvg ,

callBackFnc);

  1. 컨트롤러 소스


    @RequestMapping(value = "/selectOrdList.do")


    public NexacroResult selectOrdList(@ParamDataSet(name = "ds_searchList") Map<String,Object> ds_searchList, @ParamVariable(name = "date") String date) throws NexacroException {


    System.out.println("넥사에서 strAvg에 담은 값 : " + date);



    ...

    도움 되셨길 바랍니다.
    감사합니다:)

이종윤님의 프로필 이미지
이종윤

작성한 질문수

질문하기