출처 : 넥사크로플랫폼(nexacro platform) HTML5 API 설치
기존 Nexacro 프로젝트 폴더에서 frame, image, lib 폴더를 복사해서 현재 프로젝트에 붙여넣기
복사한 폴더 등록 (서비스 등록)
TypeDefinition 더블 클릭
[Services] 텝 [Add] 버튼 선택
frame 추가
image 추가
lib 추가
추가된 목록
등록 확인
공통 라이브러리 참조
include "lib::comLib.xjs"
출처 : 넥사크로플랫폼(nexacro platform) HTML5 API 설치
기존 Nexacro 프로젝트 폴더에서 frame, image, lib 폴더를 복사해서 현재 프로젝트에 붙여넣기
복사한 폴더 등록 (서비스 등록)
TypeDefinition 더블 클릭
[Services] 텝 [Add] 버튼 선택
frame 추가
image 추가
lib 추가
추가된 목록
등록 확인
공통 라이브러리 참조
include "lib::comLib.xjs"
출처 : 파트 IV. 컴포넌트 / 16. Grid 16.10그리드 행/열 합계 - 넥사크로플랫폼 ...
농부지기 :: Nexacro.Grid - all Checked 처리
농부지기 :: Nexacro.Grid - grid header
Dataset에 Checkbox의 체크값을 저장하기 위한 컬럼 추가
컬럼 추가 버튼 선택
chk 컬럼 추가
Grid의 컬럼 추가
[Insert] 버튼을 선택하여 Grid에 컬럼을 추가
컬럼헤더의 text 수정
컬럼의 expr, text 수정
컬럼의 displaytype, edittype를 checkbox로 수정
Grid의 Checkbox 컬럼의 체크 값 변경시 Dataset에 반영되도록 스크립트 작성
Nexacro 의 체크박스는 체크가 된 경우 1 / 체크가 되지 않은 경우 0의 Dataset의 체크값을 변경하기 위해서 스크립트 작성
this.Dataset00_oncolumnchanged = function(obj:Dataset, e:nexacro.DSColChangeEventInfo)
{
// chk 컬럼인 경우
if(e.columnid == "chk") {
// 다른 이벤트가 동작하지 않도록 설정
obj.enableevent = false; //false can stop event temporarily
// 변경된 값이 1(체크가 된 경우)인경우
if(e.newvalue == '1') {
// 1인 경우 Dataset의 chk 값을 Y로 변경
obj.setColumn(e.row,"chk",'Y');
} else if(e.newvalue == '0') {
// 0인 경우 Dataset의 chk 값을 N로 변경
obj.setColumn(e.row,"chk",'N');
}
// 다시 이벤트가 정상 동작하도록 설정
obj.enableevent = true;
}
}
체크값 전달을 위해서 SampleVO 클래스에 chk 변수 추가
public class SampleVO extends DefaultVO implements Serializable {
private java.lang.String chk;
// ... 생략 ...
public java.lang.String getChk() {
return chk;
}
public void setChk(java.lang.String chk) {
this.chk = chk;
}
... 생략 ...
컬럼 헤더 클릭시 체크박스 전부 선택되도록 스크립트 작성
this.Grid00_onheadclick = function(obj:Grid, e:nexacro.GridClickEventInfo)
{
// 첫 번째 컬럼인 경우
if (e.col == 0) {
// Dataset의 레코드 개수 만큼 반복
for(var nRow=0; nRow < this.Dataset00.getRowCount(); nRow++) {
// chk 컬럼의 값을 Y로 변경
this.Dataset00.setColumn(nRow, "chk", 'Y');
}
}
}
체크값 확인
package bizservice.nexa.sample.service;
public class EgovSampleServiceXpImpl extends AbstractServiceImpl implements EgovSampleServiceXp {
public void multiDataModifyService(List<Object> tranInfo,
Map<String, Object> inVar, Map<String, List<Object>> inDataset,
Map<String, Object> outVar, Map<String, Object> outDataset)
throws Exception {
//서비스단 개발
List<Object> list = inDataset.get("input1");
for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);
if (obj instanceof SampleVO){
SampleVO row = (SampleVO)obj;
System.out.println("pk.post_id = " + row.getPost_id() + "/체크여부 = " + row.getChk());
// 추가 작업 구현
}
}
조회 SQL문 수정 (src\main\resources\egovframework\sqlmap\bizservice\sample\Sample.xml) - 불필요한 작업
<!-- Sample resultObject -->
<resultMap id="sample" class="bizservice.nexa.sample.vo.SampleVO">
<result property="chk" column="CHK" /> <!-- chk 컬럼 추가 -->
<!-- 생략 -->
<select id="sampleDAO.selectSampleVOList" parameterClass="searchVO" resultMap="sample">
SELECT 'N' chk,
A.num AS num,
A.TITLE AS TITLE,
A.REG_ID AS REG_ID,
A.REG_DATE AS REG_DATE,
A.POST_ID AS POST_ID,
A.CONTENTS AS CONTENTS,
A.COMMUNITY_ID AS COMMUNITY_ID,
A.COUNT AS COUNT
FROM XP_BOARD A
WHERE 1=1
</select>
<!-- 생략 -->출처 : 전자정부 표준프레임워크 3.2 기반 넥사크로 플랫폼 개발자 가이드
Nexacro - 서버 호출 Button 이벤트
this.Button00_onclick = function(obj:Button, e:nexacro.ClickEventInfo)
{
var sSvcID = "list";
var sController = "blueController.do";
var sInDatasets = "";
var sOutDatasets = "";
var sArgs="";
// 서비스 아이디
var strSvcID = {id:sSvcID, outDatasets:sOutDatasets};
// 서비스 변수 값 가지고 오기
var sSvcUrl = application.services["svcurl"].url;
// 서버 호출 주소 생성
var strURL = sSvcUrl + sController;
// Ex.core.tran(this, sSvcID, sController, sInDatasets, sOutDatasets, sArgs);
this.transaction(strSvcID, strURL, sInDatasets, sOutDatasets, sArgs, "received", true, false);
}
this.received = function(id, code, message)
{
alert(code);
}
Server - Controller 클래스 생성
package bizservice.nexa.cmmn.map.controller;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import egovframework.rte.cmmn.ria.nexacro.NexacroConstant;
import egovframework.rte.cmmn.ria.nexacro.map.DataSetMap;
import egovframework.rte.cmmn.ria.nexacro.map.NexacroMapDTO;
@Controller
public class BlueController {
protected Log logger = LogFactory.getLog(this.getClass());
@RequestMapping("/blueController.do")
public ModelAndView operate(NexacroMapDTO xpDto, Model model) throws Exception {
ModelAndView mav = new ModelAndView("nexacroMapView");
try {
DataSetMap tranInfo = xpDto.getTranInfoMap();
Map <String, Object> inVar = xpDto.getInVariableMap();
Map <String, DataSetMap> inDataset = xpDto.getInDataSetMap();
Map <String, Object> outVar = xpDto.getOutVariableMap();
Map <String, DataSetMap> outDataset = xpDto.getOutDataSetMap();
System.out.println("tranInfo : " + tranInfo);
System.out.println("inVar : " + inVar);
System.out.println("inDataset : " + inDataset);
System.out.println("outVar : " + outVar);
System.out.println("outDataset : " + outDataset);
mav.addObject(NexacroConstant.ERROR_CODE, "0");
mav.addObject(NexacroConstant.ERROR_MSG, "");
} catch (Exception e) {
e.printStackTrace();
mav.addObject(NexacroConstant.ERROR_CODE, "-1");
mav.addObject(NexacroConstant.ERROR_MSG, e.toString());
}
return mav;
}
}
서버 로그
tranInfo : egovframework.rte.cmmn.ria.nexacro.map.DataSetMap@10c2d26
inVar : {PAGE={}, serverType=local, USER={}}
inDataset : {}
outVar : {}
outDataset : {}
Nexacro - 서버 호출 Button 이벤트 - 파라미터 구성 추가
this.Button00_onclick = function(obj:Button, e:nexacro.ClickEventInfo)
{
var sSvcID = "list";
var sController = "blueController.do";
var sInDatasets = "";
var sOutDatasets = "";
///////////////////////////////////////////////////////////////////////////////////////////////////
// 파라미터 구성
var sArgs="";
sArgs += Ex.util.setParam("method","getList");
sArgs += application.gfn_setParam("sqlId","blueDAO.getList");
sArgs += Ex.util.setParam("inputClass","bizservice.nexa.domain.Dept");
sArgs += Ex.util.setParam("outputClass","bizservice.nexa.domain.Dept");
// 서비스 아이디
var strSvcID = {id:sSvcID, outDatasets:sOutDatasets};
// 서비스 변수 값 가지고 오기
var sSvcUrl = application.services["svcurl"].url;
// 서버 호출 주소 생성
var strURL = sSvcUrl + sController;
// Ex.core.tran(this, sSvcID, sController, sInDatasets, sOutDatasets, sArgs);
this.transaction(strSvcID, strURL, sInDatasets, sOutDatasets, sArgs, "received", true, false);
}
Server - 서버 로그
tranInfo : egovframework.rte.cmmn.ria.nexacro.map.DataSetMap@1a80f5c
inVar : {PAGE={}, method=getList sqlId=blueDAO.getListVO inputClass=bizservice.nexa.domain.Dept outputClass=bizservice.nexa.domain.Dept , serverType=local, USER={}}
inDataset : {}
outVar : {}
outDataset : {}
Nexacro - application 내장 함수 만들기
호출 과정을 정리 해본것으로 실제 사용시 Eco, Ex 라이브러리를 사용 필요
스크립트 창 열기
this.gv_op = "OP";
this.gfn_isNull = function(value)
{
return value === null;
}
this.gfn_isUndefined = function(value)
{
return value === undefined;
}
/**
* 공백으로치환
* @param {string} 체크할 파리미터명
* @return {string} 공백으로 치환값
* @example
* trace(Eco.isEmpty("")); (output) ""
* @memberOf Ex.util
*/
this.gfn_isReplaceEmpty = function(strArg)
{
if( this.gfn_isNull(strArg) || this.gfn_isUndefined(strArg)) return "";
else
return strArg;
}
this.gfn_setParam = function (p_name, p_value)
{
return p_name + "="+this.gfn_isReplaceEmpty(p_value)+ " ";
}
this.gfn_transaction = function(obj, svcID, sController, inDatasets, outDatasets, argument, callbackFunc)
{
// Service ID Merge
var strSvcID = {id:svcID, callbackFunc:callbackFunc, outDatasets:outDatasets};
var strInDatasets = inDatasets;
var strOutDatasets = outDatasets;
var strArgument = argument;
var strCallbackFunc = callbackFunc;
// 서비스 변수 값 가지고 오기
var sSvcUrl = this.services["svcurl"].url;
// 서버 호출 주소 생성
var strURL = sSvcUrl + sController;
//
obj.transaction(strSvcID, strURL, strInDatasets, strOutDatasets, strArgument, strCallbackFunc, true, false);
}
Nexacro - 서버 호출 Button 이벤트
this.Button00_onclick = function(obj:Button, e:nexacro.ClickEventInfo)
{
var sSvcID = "list";
var sController = "blueController.do";
var sInDatasets = "";
var sOutDatasets = "";
///////////////////////////////////////////////////////////////////////////////////////////////////
// 2015.06.12 VO방식 테스트
var sArgs="";
sArgs += application.gfn_setParam("method","getList");
sArgs += application.gfn_setParam("sqlId","blueDAO.getList");
sArgs += application.gfn_setParam("inputClass","bizservice.nexa.domain.Dept");
sArgs += application.gfn_setParam("outputClass","bizservice.nexa.domain.Dept");
//
application.gfn_transaction(this, sSvcID, sController, sInDatasets, sOutDatasets, sArgs, "received");
}
this.received = function(id, code, message)
{
alert(code);
}
Server - 서비스 구현
서비스 인터페이스
package bizservice.nexa.cmmn.map.service;
import java.util.Map;
import egovframework.rte.cmmn.ria.nexacro.map.DataSetMap;
public interface BlueService {
void getList(
DataSetMap tranInfo,
Map<String, Object> inVar, Map<String, DataSetMap> inDataset,
Map<String, Object> outVar, Map<String, DataSetMap> outDataset) throws Exception;
}
서비스 구현
package bizservice.nexa.cmmn.map.service;
import java.util.Map;
import org.springframework.stereotype.Service;
import egovframework.rte.cmmn.ria.nexacro.map.DataSetMap;
@Service("blueService")
public class BlueServiceImpl implements BlueService {
public void getList(DataSetMap tranInfo,
Map<String, Object> inVar, Map<String, DataSetMap> inDataset,
Map<String, Object> outVar, Map<String, DataSetMap> outDataset)
throws Exception
{
// DAO 호출 구현
}
}
서비스 호출 Controller 구현
package bizservice.nexa.cmmn.map.controller;
import java.lang.reflect.Method;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import bizservice.nexa.cmmn.map.service.BlueService;
import egovframework.rte.cmmn.ria.nexacro.NexacroConstant;
import egovframework.rte.cmmn.ria.nexacro.map.DataSetMap;
import egovframework.rte.cmmn.ria.nexacro.map.NexacroMapDTO;
@Controller
public class BlueController {
protected Log logger = LogFactory.getLog(this.getClass());
@Resource(name="blueService")
BlueService blueService;
@RequestMapping("/blueController.do")
public ModelAndView operate(NexacroMapDTO xpDto, Model model) throws Exception {
ModelAndView mav = new ModelAndView("nexacroMapView");
try {
DataSetMap tranInfo = xpDto.getTranInfoMap();
Map <String, Object> inVar = xpDto.getInVariableMap();
Map <String, DataSetMap> inDataset = xpDto.getInDataSetMap();
Map <String, Object> outVar = xpDto.getOutVariableMap();
Map <String, DataSetMap> outDataset = xpDto.getOutDataSetMap();
for (Map map : tranInfo.getRowMaps()) {
System.out.println("tranInfo.map : " + map);
}
System.out.println("inVar : " + inVar);
System.out.println("inDataset : " + inDataset);
System.out.println("outVar : " + outVar);
System.out.println("outDataset : " + outDataset);
// 서비스 객체
Object bean = blueService;
Method method = getMethod(bean, (String)inVar.get("method"));
try{
// 메소드 호출
method.invoke(bean, new Object[] {tranInfo, inVar, inDataset, outVar, outDataset});
} catch (Exception e){
Throwable te = e.getCause();
logger.debug("Can not invoke a dispatch method name", te);
throw new Exception(te.getMessage(), te);
}
mav.addObject(NexacroConstant.ERROR_CODE, "0");
mav.addObject(NexacroConstant.ERROR_MSG, "");
} catch (Exception e) {
e.printStackTrace();
mav.addObject(NexacroConstant.ERROR_CODE, "-1");
mav.addObject(NexacroConstant.ERROR_MSG, e.toString());
}
return mav;
}
private Method getMethod(Object bean, String methodName) throws Exception{
Method[] methods = bean.getClass().getMethods();
for(int i = 0 ; i < methods.length ; i++) {
if( methods[i].getName().equals(methodName)) {
return methods[i];
}
}
throw new Exception("Cann't find " + methodName + ".");
}
}
Server - 서비스 구현 - DAO 호출
package bizservice.nexa.cmmn.map.service;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import bizservice.nexa.cmmn.map.dao.BlueDAO;
import egovframework.rte.cmmn.ria.nexacro.map.DataSetMap;
@Service("blueService")
public class BlueServiceImpl implements BlueService {
@Resource(name="sqlMapBlueDAO")
BlueDAO blueDAO;
public void getList(DataSetMap tranInfo,
Map<String, Object> inVar, Map<String, DataSetMap> inDataset,
Map<String, Object> outVar, Map<String, DataSetMap> outDataset)
throws Exception
{
// DAO 호출 구현
// List<Map> records = blueDAO.getList("blueDAO.getList", inVar);
List<Map> records = blueDAO.getList((String)inVar.get("sqlId"), inVar);
System.out.println("records = " + records.size());
DataSetMap outDsMap = new DataSetMap();
outDsMap.setRowMaps(records);
outDataset.put("output1", outDsMap);
}
}
DAO 인터페이스
package bizservice.nexa.cmmn.map.dao;
import java.util.List;
import bizservice.nexa.exception.NexaDaoException;
public interface BlueDAO {
public List getList(String queryId, Object objVo) throws NexaDaoException;
}
DAO 인터페이스 구현
package bizservice.nexa.cmmn.map.dao;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Repository;
import bizservice.nexa.exception.NexaDaoException;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
@Repository("sqlMapBlueDAO")
public class SqlMapBlueDAO extends EgovAbstractDAO implements BlueDAO {
public List getList(String queryId, Object objVo) throws NexaDaoException {
List<Object> list = new ArrayList();
list = getSqlMapClientTemplate().queryForList(queryId, objVo);
return list;
}
}
SQL Map 파일 생성 - nexacroplatform\src\main\resources\egovframework\sqlmap\bizservice\sample\Blue.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> <sqlMap namespace="Blue"> <!-- code --> <select id="blueDAO.getList" parameterClass="java.util.HashMap" resultClass="java.util.HashMap"> SELECT * FROM XP_DEPT </select> </sqlMap>
추가한 SQL Map 파일 Config에 추가 - nexacroplatform\src\main\resources\egovframework\sqlmap\bizservice\sql-map-config.xml
<sqlMap resource="egovframework/sqlmap/bizservice/sample/Blue.xml" />
출처 : 농부지기 :: Nexacro.Dataset - 한줄 추가.삭제
농부지기 :: Nexacro.Grid - excel exort
화면배치
Grid 컬럼 속성의 edit 속성 변경
Grid를 더블클릭해서 Grid 컬럼 설정 화면으로 이동
title 컬럼의 edittype : normal 로 변경
contents 컬럼의 edittype : normal 로 변경
추가버튼(BtnAdd) 구현
this.BtnAdd_onclick = function(obj:Button, e:nexacro.ClickEventInfo)
{
var nRow = this.Dataset00.addRow();
trace("nRow===>> " + nRow + " :" + this.Dataset00.saveXML());
}
삭제버튼(BtnDel) 구현
this.BtnDel_onclick = function(obj:Button, e:nexacro.ClickEventInfo)
{
var nRow = this.Dataset00.rowposition;
this.Dataset00.deleteRow(nRow);
}
저장버튼(BtnSave) 구현
this.BtnSave_onclick = function(obj:Button, e:nexacro.ClickEventInfo)
{
var sSvcID = "save";
var sController = "egovSampleModifyVO.do";
var sInDatasets = "input1=Dataset00:U";
var sOutDatasets = "";
var sArgs = "";
///////////////////////////////////////////////////////////////////////////////////////////////////
// 2015.06.12 VO방식 테스트
var sArgs="";
sArgs += Ex.util.setParam("method","multiDataModifyService");
sArgs += Ex.util.setParam("sqlId","sampleDAO.insertSampleVO");
sArgs += Ex.util.setParam("inputClass","bizservice.nexa.sample.vo.SampleVO");
sArgs += Ex.util.setParam("outputClass","bizservice.nexa.sample.vo.SampleVO");
sArgs += Ex.util.setParam("forceSqlFlag","N");
/////////////////////////////////////////////////////////////////////////////////////////////////
//addInDataSet(this, 0, "ds_input","egovframework.rte.sample.service.XPSampleVO");
//addOutDataSet(this, 0, "ds_output","egovframework.rte.sample.service.XPSampleVO");
Ex.core.tran(this,sSvcID, sController, sInDatasets, sOutDatasets, sArgs);
}
Spring Service 구현
package bizservice.nexa.sample.service;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
import bizservice.nexa.sample.dao.SampleDAO;
import bizservice.nexa.sample.vo.SampleVO;
import com.nexacro.xapi.data.DataSet;
import egovframework.rte.cmmn.ria.nexacro.vo.RowType;
import egovframework.rte.fdl.cmmn.AbstractServiceImpl;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
@Service("sampleServiceXp")
public class EgovSampleServiceXpImpl extends AbstractServiceImpl implements EgovSampleServiceXp {
protected Log logger = LogFactory.getLog(this.getClass());
/** SampleDAO */
@Resource(name = "sampleDAO")
private SampleDAO sampleDAO;
/** ID Generation */
@Resource(name = "egovIdGnrService")
private EgovIdGnrService egovIdGnrService;
public List<?> sampleSelectVOList(SampleVO searchVO) throws Exception {
// TODO Auto-generated method stub
return sampleDAO.selectSampleVOList(searchVO);
}
/**
*
* <PRE>
* 1. 메소드명 : saveData
* 2. 설 명 : DataSet의 rowType별로 Insert, Update, Delete가 수행되는 서비스이다.
* 3. 작 성 자 :
* 4. 작 성 일 : 2016. 6. 11.
* </PRE>
*
* @return ModelAndView
**/
public void multiDataModifyService(
List<Object> tranInfo,
Map<String, Object> inVar,
Map<String, List<Object>> inDataset,
Map<String, Object> outVar,
Map<String, Object> outDataset) throws Exception
{
// 서비스단 개발
List<Object> list = inDataset.get("input1");
for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);
if (obj instanceof RowType) {
RowType rowType = (RowType) obj;
if (rowType.getRowType() == DataSet.ROW_TYPE_INSERTED) {
sampleDAO.insertSample(obj);
} else if (rowType.getRowType() == DataSet.ROW_TYPE_UPDATED) {
sampleDAO.updateSample(obj);
} else if (rowType.getRowType() == DataSet.ROW_TYPE_DELETED) {
sampleDAO.deleteSample(obj);
}
}
}
}
}출처 :
전역 데이타셋(gds_pageInfo) 만들기
전역 데이타셋 추가
데이터셋 이름을 [gds_pageInfo] 으로 변경
<ColumnInfo>
<Column id="PAGE_LINE" type="STRING" size="256"/>
<Column id="CURR_PAGE" type="STRING" size="256"/>
</ColumnInfo>
<Rows>
<Row>
<Col id="PAGE_LINE"/>
<Col id="CURR_PAGE"/>
</Row>
</Rows>
application 내장 변수 설정
스크립트 창 열기
gv_op 변수에 "OP" 값 설정
this.gv_op = "OP";
서버 주소 설정
폼 만들기
메뉴 [File] > [New] > [Form] 선택
데이터셋(Dataset00) 추가
데이터셋 소스 설정
<ColumnInfo> <Column id="post_id" type="STRING" size="256"/> <Column id="title" type="STRING" size="256"/> <Column id="contents" type="STRING" size="256"/> <Column id="count" type="STRING" size="256"/> </ColumnInfo>
화면배치
Button, Grid 배치
데이터셋 [Dataset00]을 선택한 후 드레그 해서 Grid위에 올려 둔다.
폼을 초기화 하기위해서 폼의 이벤트 목록에서 onload 구현하기
this.gird_onload = function(obj:Form, e:nexacro.LoadEventInfo)
{
Ex.core.init(obj);
}
조회 버튼 이벤트 구현하기
this.Button00_onclick = function(obj:Button, e:nexacro.ClickEventInfo)
{
var sSvcID = "search";
var sController = "egovSampleSelectVO.do"; //VO형태
var sInDatasets = "";
var sOutDatasets = "Dataset00=output1";
///////////////////////////////////////////////////////////////////////////////////////////////////
// 2015.06.10 VO방식 테스트
var sArgs="";
sArgs += Ex.util.setParam("method","selectSampleVOList");
sArgs += Ex.util.setParam("sqlId","sampleDAO.selectSampleVOList");
sArgs += Ex.util.setParam("outputClass","bizservice.nexa.sample.vo.SampleVO");
/////////////////////////////////////////////////////////////////////////////////////////////////
Ex.core.tran(this,sSvcID, sController, sInDatasets, sOutDatasets, sArgs);
}
실행 결과
Static 컴포넌트 추가
속성
text : 아이디
id : lblID
background : aqua
font : 14 Dotum
Code
this.lblID00_onclick = function(obj:Static, e:nexacro.ClickEventInfo)
{
}
this.Button00_onclick = function(obj:Button, e:nexacro.ClickEventInfo)
{
var objLoginId = this.txt_userId;
var objLoginPw = this.txt_userPwd;
alert("아이디 / " + objLoginId.value);
this.trLogin(this,"login",objLoginId.value,objLoginPw.value);
}
/**
* Login service
* @param {string} id
* @param {string} pw
* @return {string] 변형문자열
* @example
* @memberOf Ex.core
*/
this.trLogin = function(obj, sSvcId, id, pw)
{
var sSvcID = sSvcId;
var sController = "loginCheck.do";
var sInDatasets = "";
var sOutDatasets = "Dataset00=gds_userInfo gds_menu=gds_menu gds_message=gds_message gds_gridInfo=gds_gridInfo gds_config=gds_config gds_task=gds_task";
var sArgs = "";
sArgs += this.setParam("V_USER_ID",id);
sArgs += this.setParam("V_USER_PWD",pw);
this.tran(obj, sSvcID, sController, sInDatasets, sOutDatasets, sArgs, "received");
}
this.isNull = function(value)
{
return value === null;
}
this.isUndefined = function(value)
{
return value === undefined;
}
/**
* 공백으로치환
* @param {string} 체크할 파리미터명
* @return {string} 공백으로 치환값
* @example
* trace(Eco.isEmpty("")); (output) ""
* @memberOf Ex.util
*/
this.isReplaceEmpty = function(strArg)
{
if( this.isNull(strArg) || this.isUndefined(strArg)) return "";
else
return strArg;
},
this.setParam = function (p_name, p_value)
{
return p_name + "="+this.isReplaceEmpty(p_value)+ " ";
}
this.tran = function(obj, svcID, sController, inDatasets, outDatasets, argument, callbackFunc)
{
// Service ID Merge
var strSvcID = {id:svcID, callbackFunc:callbackFunc, outDatasets:outDatasets};
var strURL = "http://localhost/" + sController;
var strInDatasets = inDatasets;
var strOutDatasets = outDatasets;
var strArgument = argument;
var strCallbackFunc = callbackFunc;
var m_output = outDatasets;
this.transaction(strSvcID, strURL, strInDatasets, strOutDatasets, strArgument, strCallbackFunc, true, false);
}
this.received = function(id, code, message)
{
if (code == 0) {
this.alert(this.Dataset00.rowcount + " numbers of data have been found.");
trace(this.Dataset00.rowcount + " numbers of data have been found.");
} else {
this.alert("Error["+code+"]:"+message);
trace("Error["+code+"]:"+message);
}
}
SERVER - Controller
@RequestMapping("/loginCheck.do")
public ModelAndView loginCheck(NexacroMapDTO xpDto, HttpServletRequest request) throws Exception {
Log logger = LogFactory.getLog(this.getClass());
ModelAndView mav = new ModelAndView("nexacroMapView");
try {
Map <String, Object> inVar = xpDto.getInVariableMap();
Map <String, DataSetMap> outDataset = xpDto.getOutDataSetMap();
String sUserId = (String)inVar.get("V_USER_ID");
String sPswd = (String)inVar.get("V_USER_PWD");
if(("").equals(sUserId)){
mav.addObject(NexacroConstant.ERROR_CODE, "-1");
mav.addObject(NexacroConstant.ERROR_MSG, "ERROR");
return mav;
}
if(("").equals(sPswd)){
mav.addObject(NexacroConstant.ERROR_CODE, "-1");
mav.addObject(NexacroConstant.ERROR_MSG, "ERROR");
return mav;
}
User user = new User();
user.setUser_id(sUserId);
user.setPswd(sPswd);
logger.debug("LogInOutController::loginCheck ...." + sUserId + " : " + sPswd);
logInOutService.loginCheck(mav, user, request, outDataset);
mav.addObject(NexacroConstant.OUT_VARIABLES_ATT_NAME, xpDto.getOutVariableMap());
mav.addObject(NexacroConstant.OUT_DATASET_ATT_NAME, xpDto.getOutDataSetMap());
mav.addObject(NexacroConstant.ERROR_CODE, "0");
mav.addObject(NexacroConstant.ERROR_MSG, "");
} catch ( Exception e ) {
e.printStackTrace();
}
return mav;
}
SERVER - Service
public void loginCheck(ModelAndView mav, User user, HttpServletRequest request, Map<String, DataSetMap> outDataset) throws NexaServiceException {
this.user = logInOutDAO.loginCheck(user);
System.out.println("this.user.................................." + this.user);
if (this.user == null) {
mav.addObject(NexacroConstant.ERROR_CODE, "-1");
mav.addObject(NexacroConstant.ERROR_MSG, "User ID is Not Correct.");
throw new NexaServiceException();
} else if (this.user != null && !user.getPswd().equals(this.user.getPswd())) {
mav.addObject(NexacroConstant.ERROR_CODE, "-1");
mav.addObject(NexacroConstant.ERROR_MSG, "User Password is Not Correct.");
throw new NexaServiceException();
} else {
//Convert Object to List
List<Map> listUser = ObjectUtil.getObjectToList(this.user, "UPPER_CASE");
List<Map> listMenu = logInOutDAO.loginMenu(this.user);
//List<Map> listMessage = logInOutDAO.loginMessage();
//loadConfig(request.getSession());
request.getSession().setAttribute("User", this.user);
Calendar ca = Calendar.getInstance();
request.getSession().setAttribute("day", ca.get(Calendar.DAY_OF_MONTH));
request.getSession().setAttribute("month", ca.get(Calendar.MONTH));
request.getSession().setAttribute("year", ca.get(Calendar.YEAR));
//[DataSet] Login User
DataSetMap outUserDsMap = new DataSetMap();
outUserDsMap.setRowMaps(listUser);
outDataset.put("gds_userInfo", outUserDsMap);
//[DataSet] Login User Menu
DataSetMap outMenuDsMap = new DataSetMap();
outMenuDsMap.setRowMaps(listMenu);
outDataset.put("gds_menu", outMenuDsMap);
}
}프로젝트 만들기
환경설정
Form 생성
Static 컴포넌트 추가
속성
text : 아이디
id : lblID
background : aqua
font : 14 Dotum
소스 생성하기
이클립스 새로고침
새로고침 전
새로고침 후 (webapp 서브 폴더로 test 폴더가 생성된 것을 확인)
크롬브라우져에서 실행하기
실행 결과
출처 : 넥사크로플랫폼 14 / 초보자를 위한 자습서 14.0.1.1501.2 화면 만들기 (트랜잭션)
컴포넌트 목록에서 [Dataset] 선택
Invisible Objects 창에 마우스 클릭
Dataset 추가 된것 확인
[Dataset Contents Editor]에서 컬럼 추가
[Dataset Contents Editor]에서 행(Row) 추가
Source 확인
<ColumnInfo>
<Column id="code" type="STRING" size="32"/>
<Column id="value" type="STRING" size="32"/>
</ColumnInfo>
<Rows>
<Row>
<Col id="code">1</Col>
<Col id="value">Oracle</Col>
</Row>
<Row>
<Col id="code">2</Col>
<Col id="value">MySQL</Col>
</Row>
<Row>
<Col id="code">3</Col>
<Col id="value">SQL Server</Col>
</Row>
</Rows>
컴포넌트 목록에서 [Combo] 선택
[Design] 창에 Drag해서 선택한 컴포넌트를 배치
[Combo] 컴포넌트의 속성창에서 [innerdataset] 항목을 [Dataset00]으로 선택
[codecolumn] : code / [datacolumn] : value 선택
컴포넌트 목록에서 [Button] 선택
[Design] 창에 Drag해서 선택한 컴포넌트를 배치
[Edit] 컴포넌트도 두개 배치
[Button00] 의 클릭 이벤트 스크립트 작성
Combo 박스에서 선택한 Index, Code, Value 확인하는 스크립트 작성
this.Button00_onclick = function(obj:Button, e:nexacro.ClickEventInfo)
{
this.alert(this.Combo00.getInnerDataset().name); // 바인된 Dataset name
this.alert(this.Combo00.getCount()) // item 개수
this.alert(this.Combo00.index); // 선택된 index
//
this.alert('선택된 index = ' + this.Combo00.combolist._selectinfo.index);
//
this.edtCode.set_value(this.Combo00.combolist._selectinfo.value);
this.edtText.set_value(this.Combo00.combolist._selectinfo.text);
}
[Quick View] 버튼 선택하여 실행
실행 - [선택] 버튼 선택전
실행 - [선택] 버튼 선택후