테이블에 있는 list를 ajax통신을 통해 java로 넘기기 list<Map<String, Object>> 형식
데이터 형태
{codeArrObj=[
{"newcode":"0001","newcodename":"A 1","codetype":"acode","beforecode":"0001"},
{"newcode":"0002","newcodename":"B","codetype":"acode","beforecode":"0002"},
{"newcode":"0003","newcodename":"C","codetype":"acode","beforecode":"0003"},
{"newcode":"0004","newcodename":"D","codetype":"acode","beforecode":"0004"},
{"newcode":"9999","newcodename":"1234","codetype":"acode","beforecode":"9999"}]
}
html 코드 input 값에 있는 여러개의 행 데이터를 java로 넘겨서 update 또는 insert 하고 싶다.
id name속성이 없어도됨
<input type="hidden" id="codeType" name="codeType" value="${Code[0].codetype}"/>
<table class="table table-striped jambo_table bulk_action" id="codeList_table">
<thead>
<tr class="headings">
<th class="column-title">코드</th>
<th class="column-title">코드 명</th>
</tr>
</thead>
<tbody>
<c:forEach var="item" items="${Code}" varStatus="status">
<tr>
<td>
<input type="text" value="${item.code}" />
</td>
<td>
<input type="text" value="${item.codename}"/>
<input type="hidden" value="${item.code}"/>
</td>
</tr>
</c:forEach>
</tbody>
</table>
javascript 소스 (jQuery)
// ajax controller 매핑용 url을 변수에 담음
var l_url = "/admin/saveCodeAjax.do";
// array 변수 초기화
var codeArr = [];
// object 변수 초기화
var dataObj={};
//원하는 데이터의 형태
/*
* {codeArrObj=[
* {"newcode":"0001","newcodename":"A 경로당 ","codetype":"agencycode","beforecode":"0001"},
* {"newcode":"0002","newcodename":"B 경로당","codetype":"agencycode","beforecode":"0002"},
* {"newcode":"0003","newcodename":"C 경로당","codetype":"agencycode","beforecode":"0003"},
* {"newcode":"0004","newcodename":"D 경로당","codetype":"agencycode","beforecode":"0004"},
* {"newcode":"9999","newcodename":"1234","codetype":"agencycode","beforecode":"9999"}]
* }
*/
// for문으로 데이터 생성
for (var i = 0 ; i < $("#codeList_table tbody tr").length; i++){
// 행 별로 첫번째 input 값을 찾아서 newcode로 초기화
var newcode = $("#codeList_table tbody tr").eq(i).children().children().eq(0).val();
// 행 별로 두번째 input 값을 찾아서 newcode로 초기화
var newcodename = $("#codeList_table tbody tr").eq(i).children().children().eq(1).val();
// 행 별로 세번째 input 값을 찾아서 newcode로 초기화
var beforecode = $("#codeList_table tbody tr").eq(i).children().children().eq(2).val();
// object에 newcode라는 key로 newcode 값 바인딩
dataObj.newcode = newcode;
// object에 newcodename라는 key로 newcodename 값 바인딩
dataObj.newcodename= newcodename;
// object에 codetype라는 key로 codetype 값 바인딩
dataObj.codetype= $("#codeType").val();
// object에 beforecode라는 key로 beforecode 값 바인딩
dataObj.beforecode= beforecode;
// array에 object push
codeArr.push(dataObj);
// push 후 초기화 해주지 않으면 같은 object로 loop 만큼 push됨
dataObj ={};
}
// ajax controller에서 처리할 파라미터를 변수에 담음(json형태)
var jsonData = JSON.stringify(codeArr);
$.ajax({
url : l_url,
type : "POST",
dataType : 'json',
data : {codeArrObj : jsonData},
success : function(p_resultvalue) {
$(".evaluation_data").attr('disabled', true);
alert(p_resultvalue.result_msg);
}
});
java 코드
// 코드 저장하기
@Override
public int saveCodeAjax(HashMap<String, Object> commandMap) throws Exception {
// codeArrObj를 JSONarray 타입으로 형변환
JSONArray array = JSONArray.fromObject(commandMap.get("codeArrObj"));
// 모든 코드의 결과 값 저장을 위한 초기화
int[] results= new int[array.size()];
// 최종 결과값 (정상 저장 될 경우 1로 리턴)
int result=1;
// JSONarray타입에 저장된 값 처리
for(int i=0; i<array.size(); i++){
// array 안의 값을 object로 세팅
JSONObject obj = (JSONObject)array.get(i);
// mybatis에 파라미터로 넘겨줄 map 타입 초기화
Map<String, Object> resendMap = new HashMap<String, Object>();
// object의 이전코드명을 파라미터로 세팅(update 해야할 경우를 위해 필요)
resendMap.put("beforecode", obj.get("beforecode"));
// object의 코드타입을 파라미터로 세팅(어떤 코드 저장인지 파악을 위해 필요)
resendMap.put("codetype", obj.get("codetype"));
// object의 신규코드를 파라미터로 세팅(코드 저장을 위해 세팅)
resendMap.put("newcode", obj.get("newcode"));
// object의 신규코드명을 파라미터로 세팅(코드 저장을 위해 세팅)
resendMap.put("newcodename", obj.get("newcodename"));
results[i] = DAO.insertCode(resendMap);
// for문 내부에서 한 코드 업데이트, 인서트가 발생했을경우
// 한 건이라도 실패(0)가 나오면 결과값은 0이 됨
result *= results[i];
}
return result;
}
'개발의 흔적 > Front' 카테고리의 다른 글
form 에서 check box 값 전달 spring에서 처리(다중 check value 전달) (0) | 2021.01.14 |
---|---|
jstl 체크 박스 c:forEach 생성 후 c:forEach 로 checked 표시 (0) | 2021.01.13 |
google traslate 구버전에서 자동 번역 기능 추가 하는 방법 (1) | 2019.02.12 |
[jQuery] 여러 건의 ajax 통신 (2) | 2018.08.29 |
웹 접근성 점검 규칙(웹 접근성 오류 해결 방안) (1) | 2016.03.22 |