반응형

테이블에 있는 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;
}

 

 

반응형

+ Recent posts