Ext-JS CRUD

From JCFWiKi

Jump to: navigation, search

목차

[편집] Ext-js기반의 CRUD만들기

[편집] 조회하기

  • js파일의 findData함수
function findData() {
	
	params = "{" 
		+ 'deptCoder:\"' + Ext.get('shDeptCode').dom.value + "\","
           	+ 'deptNamer:\"' + Ext.get('shDeptName').dom.value + "\","
           	+ 'custCoder:\"' + Ext.get('shCustCode').dom.value + "\""
           	+ "}"
           	
		Ext.Ajax.request({
		    url: '/mdms/deptInfo/findDeptSpecs.action',
		    jsonData: params,
		    headers: {
            	'Content-Type': 'application/json'
        	},		               
		    success: function( r, o ) {
		    	alert(r.responseText);	    	
		    	try {
		    		specStore.loadData(Ext.decode(r.responseText));
		    	
		    	} catch(e) {
		    	}
	    	},
			failure: function( r, o ) {
			alert("ERR"+r.responseText);
			}
		})
	}
  • struts.xml
<action name="findDeptSpecs" class="com.daewoobrenic.dsom.mm.action.DeptInfoAction" method="findDeptSpecs">	
		</action>
  • action
	public String findDeptSpecs() {
 
		deptMasts = new ArrayList();
		Map searchMap = (Map) InChannel.getVariables();
		deptMasts.add(deptInfoService.viewDeptMast(searchMap));
		deptSpecs = deptInfoService.viewDeptSpecs(searchMap);
		OutChannel.setDataSet("deptSpecs", deptSpecs);
		OutChannel.send();

[편집] 추가/삭제(그리드 적용시)

  • 그리드에서 셀추가는 화면에서만 이루어지는 것이므로 js파일만 다음과 같이 작성 하면된다.
    • 추가)EditorGridPanel에 tbar로 그리드에 추가 버튼 넣고 insertHandler함수 호출하기
      • insertHandler
	function insertHandler(btn) { 
			var code = new Code({ //초기값 셋팅
        	flag: 'insert',
            id: ' ',
            name: '',
            inUse: '사용', 
            parentId: '',
            description: '',
            indoor: false
        });
		  gridForm.stopEditing();
                 codeStore.insert(0, code); 
              gridForm.startEditing(0, 0);
}
    • 삭제)EditorGridPanel에 tbar로 그리드에 삭제 버튼 넣고 공통 스트립트의 deleteGridRow함수에 EditorGridPanel 넘기면 삭제완료
    • 그리드 부분 소스
 var gridForm = new Ext.grid.EditorGridPanel({
		id: 'company-form',
        store: codeStore,
        cm: colModel,
         sm: sm,
     	renderTo: 'upperWork_grid', 
    	autoExpandColumn: 'desc',
        width:700,
        autoWidth: true,
        height:350,
        title:'CI 분류목록',
        clicksToEdit:2,
        frame:true,
        bbar: new Ext.PagingToolbar({
            pageSize: 10,
            store: codeStore,
            displayInfo: true,
            displayMsg: 'Displaying topics {0} - {1} of {2}',
            emptyMsg: "No topics to display"
        }),
       	tbar: [{
				text: '추가',
				handler: insertHandler,//함수호출
				iconCls: 'blist'
			}, {
				text: '삭제',
				     handler : function(){
                  deleteGridRow(gridForm);
                 },
				iconCls: 'blist'
			}]         
    });            
});

[편집] 저장하기

  • 화면에서 저장 버튼을 누르면 화면에서만 입력과 수정, 삭제되었던 데이터들이 한꺼번에 서버에 날라가고 서비스에 각각 해당되는 Dao를 호출한다.
    • js파일이 saveData()
	function saveData() {
		var param = createGridData(codeStore);
	    param = "{" +  '"codeList":' + param + "}" //codeList은 action에서 받는 dataSet이름
		Ext.Ajax.request({
	    	url: '/dsom/comCode/saveComCodeList.action',
	    	jsonData: param,
		    headers: {
            	'Content-Type': 'application/json'
        	},
	    	success: function( r, o ) {
	    		setMessage("success");
	    		codeStore.commitChanges();
			},
			failure: function( r, o ) {
			setMessage("ERR");
			}
		})
		
	}
    • action의 saveComCodeList()
      • InChannel.getDataSetList메소드에 해당되는 모델 클래스(Code.class), 와 js파일에서 넘긴 dataSet(codeList) 넘김
	public String saveComCodeList(){
		codeList = new ArrayList();
		codeList = InChannel.getDataSetList(Code.class, "codeList");
		codeService.saveComCodeList(codeList);
		return null;	
	}
    • service의 saveComCodeList()
      • 받은 list를 for으로 돌려 insert, update, delete 중에 해당되는 Dao를 호출함.
	public void saveComCodeList(List codeList) {
		// TODO Auto-generated method stub
		// Flag로 수정인지 조회인지, 삭제인지 파악
		for (int i = 0; i < codeList.size(); i++) {
			code = (Code) codeList.get(i);
			System.out.println(code.getFlag());
			if (Constant.USER_STATUS_INSERT.equalsIgnoreCase(code.getFlag()))
				codeDao.createCode(code);
			else if (Constant.USER_STATUS_UPDATE.equalsIgnoreCase(code
					.getFlag()))
				codeDao.updateCode(code);
			else if (Constant.USER_STATUS_DELETE.equalsIgnoreCase(code
					.getFlag()))
				codeDao.deleteCode(code.getId());
			else
				throw new BusinessException("Row Status" + code.getFlag()
						+ " is not appropriate.");
		}
 
	}