From JCFWiKi
[편집] Ext-js기반의 CRUD만들기
[편집] 조회하기
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);
}
})
}
<action name="findDeptSpecs" class="com.daewoobrenic.dsom.mm.action.DeptInfoAction" method="findDeptSpecs">
</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함수 호출하기
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를 호출한다.
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.");
}
}