Deploy 수행
Build > Deploy… > Deploy Application > 을 클릭한 다음 경로는 이클립스 동적 웹 프로젝트 폴더의 WebContents
폴더로 설정합니다.
프로젝트에 폼 설정
childframe
으로 이동 후 Appearance
의 formurl
에서 설정합니다.
폼 간 이동
this.toFrmTest_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { this.go("Base::FrmPortal.xfdl"); }
Base
폴더 밑의 FrmPortal.xfdl
파일명의 폼으로 이동합니다.
전역 변수 사용
alert(application.[전역 변수 이름]);
클라이언트/서버 구축
폼으로 writer와 message를 보내고 처리 결과를 받는 코드입니다.
(1) 클라이언트(넥사크로 프로젝트) 쪽 코드 (input):
this.btnBack_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { this.go("Base::FrmPortal.xfdl"); } this.btnSubmit_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { var writer = this.writer.value; var message = this.message.value; // 비어 있는 행 추가 var row = this.DatasetRequest.addRow(); // 숫자 리턴 this.DatasetRequest.setColumn(row, "id", 0); this.DatasetRequest.setColumn(row, "writer", writer); this.DatasetRequest.setColumn(row, "message", message); var id = "request"; var url = "../input.msg"; var reqDs = "request=DatasetRequest"; // DatasetRequest를 리퀘스트에 담아 보낸다. var respDs = "DatasetResponse=response"; // 서버가 response라는 이름으로 DatasetResponse를 보낸다. // 왼쪽 자리에는 데이터를 받아올 데이터셋의 아이디를 입력 var args = ""; // var args = "writer=" + writer + " message=" + message; var callback = "afterComplete"; // 작업이 끝난 후 할 작업을 적는다. 함수의 이름을 문자열로 적는다. // 데이터를 보내는 방식 // 1. DS(request dataset)에 보냄 // 2. arguments에 보냄 (간단한 자료) this.transaction(id, url, reqDs, respDs, args, callback); // alert(writer + message); } this.afterComplete = function(id, code, msg){ //alert(this.DatasetResponse.getColumn(0, "forward")); alert(this.DatasetResponse.getColumn(0, "resultMessage")); this.go(this.DatasetResponse.getColumn(0, "forward")); }
this.btnBack_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { this.go("Base::FrmPortal.xfdl"); } // 폼의 onload시 불러올 이벤트 this.loadData = function() { var id = "outputProc"; var url = "../output.msg"; var reqDs = ""; var respDs = "DatasetMessages=response"; var args = ""; var callback = "received"; this.transaction(id, url, reqDs, respDs, args, callback); } this.received = function() { alert("통신완료"); }
(2) 서버(자바 서블릿) 쪽 코드:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("요청 확인"); request.setCharacterEncoding("UTF8"); // PrintWriter를 꺼내기 전에 response의 인코딩을 설정 response.setCharacterEncoding("UTF8"); // 넥사크로 XML 파싱 // HTTP Platform Request HttpPlatformRequest hpRequest = new HttpPlatformRequest(request); try { // URL 패턴 획득 String requestURI = request.getRequestURI(); String contextPath = request.getContextPath(); System.out.println("@RequestURI: " + requestURI); System.out.println("@ContextPath: " + contextPath); String command = requestURI.substring(contextPath.length()); System.out.println("@Command: " + command); // DAO: 공용 영역에 만들어 놓음 MessagesDAO mdao = new MessagesDAO(); if(command.equals("/input.msg")) { hpRequest.receiveData(); // 일단 뭔가 받음 PlatformData inputData = hpRequest.getData(); DataSet ds = inputData.getDataSet("request"); // request=DatasetRequest에서 받는 쪽의 이름은 request이다. int row = ds.getRowCount(); String writer = ds.getString(row - 1, 1); String message = ds.getString(row - 1, 2); System.out.println(writer + " : " + message); // response로 다시 보냄 // DAO 작업 int result = mdao.insertAnMessage(new Message(0, writer, message)); String resultMessage = result > 0 ? "입력 성공" : "입력 실패"; PlatformData outputData = new PlatformData(); DataSet respDataset = new DataSet("response"); respDataset.addColumn("forward", DataTypes.STRING, 256); respDataset.addColumn("resultMessage", DataTypes.STRING, 256); // resultMessge 컬럼 추가 int row2 = respDataset.newRow(); respDataset.set(row2, "forward", "Base::FrmMain.xfdl"); respDataset.set(row2, "resultMessage", resultMessage); // resultMessage 메시지 추가 outputData.addDataSet(respDataset); HttpPlatformResponse respData = new HttpPlatformResponse(response, PlatformType.CONTENT_TYPE_XML, "UTF-8"); respData.setData(outputData); respData.sendData(); } else if(command.equals("/output.msg")) { hpRequest.receiveData(); // 일단 뭔가 받음 PlatformData inputData = hpRequest.getData(); DataSet ds = inputData.getDataSet("request"); List<Message> outputList = mdao.getAllMessages(); PlatformData outputData = new PlatformData(); DataSet respDataset = new DataSet("response"); respDataset.addColumn("seq", DataTypes.INT, 4); respDataset.addColumn("writer", DataTypes.STRING, 20); respDataset.addColumn("message", DataTypes.STRING, 300); for(Message m : outputList) { int row = respDataset.newRow(); respDataset.set(row, "seq", m.getId()); respDataset.set(row, "writer", m.getWriter()); respDataset.set(row, "message", m.getMessage()); } outputData.addDataSet(respDataset); HttpPlatformResponse respData = new HttpPlatformResponse(response, PlatformType.CONTENT_TYPE_XML, "UTF-8"); respData.setData(outputData); respData.sendData(); } } catch (PlatformException e) { e.printStackTrace(); } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }
3개의 댓글
김수빈 · 2020년 11월 5일 6:35 오후
안녕하십니까 좋은글 감사합니다. 혹시 관련 파일이 남아있으면 받을 수 있을까요? 제가 이번에 넥사크로 프로젝트를 진행하는데 정말 많은 도움이 될 것 같습니다! 감사합니다.
yoonbumtae (BGSMM) · 2020년 11월 5일 8:34 오후
안녕하세요.
소스 내용을 https://github.com/ayaysir/nexacro-crud 에 올렸습니다.
감사합니다.
김수빈 · 2020년 11월 7일 5:03 오후
정말 감사합니다!