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

오성철님의 프로필 이미지

작성한 질문수

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

페이징처리 관련 문의 드립니다

해결된 질문

23.12.27 15:51 작성

·

232

·

수정됨

0

안녕하세요. 페이징 처리 관련하여 질문 사항 있어 요청 드립니다.

현재 다른 분께서 페이징 처리 관련하여 질문하신 것에 강사님께서 댓글 달아주신 내용 보면서 페이징 처리 구현 중인데 잘 안되서 문의드립니다.

구현한 사항은 순서대로 다음과 같습니다.

1) OB_001.xfdl(게시판 메인화면) 그리드 하단에 div 만들고

id : Div00

url : cmm::paging_comm.xfdl

기입한 후, 저장하였습니다

 

2) paging_comm.xfdl

 

cmm 폴더내에 paging_comm.xfdl 파일 생성하여 페이징 처리 관련 컴포넌트 만들고 ID 부여하였습니다.

 

이후, 공유해주신 링크에 paging_comm.xfdl 페이징 처리 스크립트 전체 복사하여 붙여넣었습니다.

 

 

3) UiadapterBoardServiceImpl.java에 page_sample.jsp 스크립트를 java 코드로 변환하여 selectOrdLList 메서드에 코드 추가하였습니다.

코드 아래와 같이 첨부드리니 확인 부탁드립니다.

( HttpServletRequest request = ;, HttpServletResponse response = 부분에서

request.getInputStream()과 response.getOutputStream();에서 "The local variable request may not have been initialized" 동일한 오류 납니다. )

public ArrayList<Map<String, Object>> selectOrdList(Map<String, Object> ds_searchList) {
		UiadapterBoardMapper mapper = sqlSession.getMapper(UiadapterBoardMapper.class);
	    try {
	        String strCharset = "utf-8";
	        
	        // PlatformRequest 생성 및 데이터 수신
	        HttpServletRequest request = (HttpServletRequest) request.getInputStream();  //The local variable request may not have been initialized 오류 발생
	        PlatformRequest platformRequest = new PlatformRequest(request.getInputStream(), PlatformType.CONTENT_TYPE_XML, strCharset);
	        platformRequest.receiveData();
	        PlatformData inPD = platformRequest.getData();
	        
	        VariableList inVariableList = inPD.getVariableList();
	        DataSetList inDataSetList = inPD.getDataSetList();
	        
	        int iRowCnt = inVariableList.getInt("rowCount");
	        int iPageNo = inVariableList.getInt("pageNum");
	        
	        // PlatformResponse 생성
	        HttpServletResponse response = (HttpServletResponse) response.getOutputStream();  // The local variable request may not have been initialized 오류 발생
	        PlatformResponse platformResponse = new PlatformResponse(response.getOutputStream(), PlatformType.CONTENT_TYPE_XML, strCharset);
	        PlatformData outPD = new PlatformData();
	        
	        VariableList outVariableList = new VariableList();
	        DataSetList outDataSetList = new DataSetList();
	        
	        try {
	            int iTotalRowCount = 1000;
	            int nPageBlock = (int) Math.ceil((double) iTotalRowCount / iRowCnt);
	            int nStartRow = iRowCnt * (iPageNo - 1);
	            int nEndRow = nStartRow + 30;
	            
	            DataSet outDataSet = new DataSet("output");
	            
	            outDataSet.addColumn("Column0", DataTypes.INT, 10);
	            outDataSet.addColumn("Column1", DataTypes.STRING, 10);
	            outDataSet.addColumn("Column2", DataTypes.STRING, 10);
	            outDataSet.addColumn("Column3", DataTypes.STRING, 10);
	            outDataSet.addColumn("Column4", DataTypes.STRING, 10);
	            outDataSet.addColumn("Column5", DataTypes.STRING, 10);
	            outDataSet.addColumn("Column6", DataTypes.STRING, 10);
	            outDataSet.addColumn("Column7", DataTypes.STRING, 10);
	            outDataSet.addColumn("Column8", DataTypes.STRING, 10);
	            outDataSet.addColumn("Column9", DataTypes.STRING, 10);
	            
	            int nRow;
	            for (int i = nStartRow; i < nEndRow; i++) {
	                if (i + 1 > 1000) {
	                    break;
	                }
	                
	                nRow = outDataSet.newRow();
	                
	                outDataSet.set(nRow, "Column0", i + 1);
	                outDataSet.set(nRow, "Column1", "test");
	                outDataSet.set(nRow, "Column2", "test");
	                outDataSet.set(nRow, "Column3", "test");
	                outDataSet.set(nRow, "Column4", "test");
	                outDataSet.set(nRow, "Column5", "test");
	                outDataSet.set(nRow, "Column6", "test");
	                outDataSet.set(nRow, "Column7", "test");
	                outDataSet.set(nRow, "Column8", "test");
	                outDataSet.set(nRow, "Column9", "test");
	            }
	            
	            outDataSetList.add(outDataSet);
	            
	            Variable pageBlockCount = new Variable("pageBlockCount");
	            pageBlockCount.set(nPageBlock);
	            
	            Variable totRowCount = new Variable("totRowCount");
	            totRowCount.set(iTotalRowCount);
	            
	            outVariableList.add("ErrorCode", 0);
	            outVariableList.add("ErrorMsg", "succ");
	            outVariableList.add(pageBlockCount);
	            outVariableList.add(totRowCount);
	            
	        } catch (Exception e) {
	            
	            outVariableList.add("ErrorCode", -1);
	            outVariableList.add("ErrorMsg", e.toString());
	            
	        } finally {
	            
	            outPD.setDataSetList(outDataSetList);
	            outPD.setVariableList(outVariableList);
	            OutputStream out = response.getOutputStream();
	            platformResponse.setData(outPD);
	            platformResponse.sendData();
	        }

	        
	        
	    } catch (Exception e) {
	       
	    }

	    return mapper.selectOrdList(ds_searchList);  
	}

 

 

4) 기존 주문 조회 쿼리를 안내해주신대로 한번 더 감싸서 수정하였습니다

4) 기존 주문 조회 쿼리를 안내해주신대로 한번 더 감싸서 수정하였습니다

SELECT *

FROM (              A.ORD_NO 								AS ORD_NO 			/*주문번호*/
			  	  , FN_CODE_NM('001',A.ORD_STAT_CD)   		AS ORD_STAT_NM  	/*주문상태*/
			      , A.CUST_CD   					    	AS CUST_NO      	/*고객번호*/
			      , B.CUST_NM  								AS CUST_NM      	/*고객명*/
			      , FN_CODE_NM('002',B.CUST_GBCD)  			AS CUST_GBCD_NM		/*고객구분*/
			      , B.PHONE      							AS PHONE			/*전화번호*/
			      , B.ADDR      	 						AS ADDR				/*주소*/
			      , C.ITEM_NM    							AS ITEM_NM			/*상품명*/
			      , A.REG_DT      							AS REG_DT 			/*주문일시*/
			      , 0 										AS CHK				/*체크박스*/
			  FROM TB_ORD A
			LEFT JOIN 
				TB_CUST B ON A.CUST_CD = B.CUST_CD 
			LEFT JOIN 
				TB_ITEM C ON A.ITEM_CD = C.ITEM_CD
			WHERE 1=1
			<if test="ORD_NO != null and ORD_NO !=''">
				AND A.ORD_NO = #{ORD_NO}
			</if>
			<if test="CUST_NM != null and CUST_NM !=''">
				AND B.CUST_NM = #{CUST_NM}
			</if>
			<if test="COMP_YN == 'true'">
				AND B.CUST_GBCD = 'C'
			</if>
			<if test="ORD_STAT_CD != null and ORD_STAT_CD !=''">
				AND A.ORD_STAT_CD = #{ORD_STAT_CD}
			</if>
			<if test="CUST_GBCD != null and CUST_GBCD !=''">
				AND B.CUST_GBCD = #{CUST_GBCD}
			</if>) 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>

 

 

5) 결과

상단과 같은 과정을 통해 구현한 후, 넥사크로에서 런치하여 확인해보니 메인화면 자체가 뜨지 않습니다.

혹시 paging_comm.xfdl의 스크립트와 page_sample.jsp 자바 형식으로 변환하여 UiadapterBoardServiceImpl에 구현한 코드 공유해주실 수 있으실까요?

그리고 OB_001.xfdl에 페이징 처리 div 만들고 "id : Div00"와 "url : cmm::paging_comm.xfdl" 부여한 후, cmm 폴더에 paging_comm.xfdl 형성하여 페이징 처리 관련 컴포넌트 그리고 id 부여하여 스크립트 복붙하는게 맞는지 확인 부탁드립니다.

감사합니다.

답변 1

0

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

2023. 12. 29. 13:39

안녕하세요~ 킷도우입니다:)

kitdow.on@gmail.com 으로 메일 요청 주시면 해당 메일로 유관 소스 첨부하여 전송 드리겠습니다:)

해당 소스 참고해서 구현하시면 도움되실 것 같습니다.

감사합니다!