์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ - ์ฃผ๋ฌธ๊ด€๋ฆฌ - ์ฃผ๋ฌธ๊ด€๋ฆฌ ํŽ˜์ด์ง€ (4) ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ

2023. 5. 3. 16:32ใ†Spring

์ฃผ๋ฌธ ๋‚ด์—ญ ์ฒดํฌ ๋ฐ•์Šค ์„ ํƒ ํ›„ ๊ฐ ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ํด๋ฆญ ์‹œ ์‹ค์ œ๋กœ ๋‹ค์Œ ์ฃผ๋ฌธ ์ƒํƒœ๋กœ ๋ชฉ๋ก ๋„˜์–ด๊ฐ€๊ฒŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„

ajax ์‚ฌ์šฉ.

๋Œ€๋žต์ ์ธ ์ฟผ๋ฆฌ ์ž‘์„ฑ

 

<!-- ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ -->
<update id="changeStatus">
    UPDATE ORDER_STATUS
    SET
        STATUS_CODE = #{statusCdoe}
    WHERE ORDER_NUM IN (?, ?) <!-- ์ฃผ๋ฌธ ๋‚ด์—ญ์—์„œ ์ฒดํฌํ•œ ์ฒดํฌ๋ฐ•์Šค๋“ค์˜ orderNum -->
</update>

 

order_manage.html์— ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ์„ th:onclick ์†์„ฑ ์‚ฌ์šฉํ•˜์—ฌ js ํ•จ์ˆ˜์™€ ์—ฐ๊ฒฐ

๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํ•จ์ˆ˜ ์‹คํ–‰!

 

order_html.js

์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹คํ–‰๋  ํ•จ์ˆ˜ ์ž‘์„ฑ

ajax ์ฝ”๋“œ ์ถ”๊ฐ€ ๋ฐ controller ์ด๋™ ๊ฒฝ๋กœ ์ž‘์„ฑ

//์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹คํ–‰
function changeStatus(){
	
	//ajax start
	$.ajax({
		url: '/admin/changeStatusAjax', //์š”์ฒญ๊ฒฝ๋กœ
		type: 'post',
		data: {}, //ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ
		async: true, //default 
		//contentType: 'application/json; charset=UTF-8', //json ๋ฐฉ์‹
		contentType: "application/x-www-form-urlencoded; charset=UTF-8", //default ๋ฐฉ์‹
		success: function(result) {
			alert('ajax ํ†ต์‹  ์„ฑ๊ณต');
		},
		error: function() {
			alert('์‹คํŒจ');
		}
	});
	//ajax end
}

AdminController ์ž‘์„ฑ

//์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹คํ–‰
@ResponseBody
@PostMapping("/changeStatusAjax")
public void changeStatusAjax(){

}

์ด์ œ ์ฟผ๋ฆฌ ๋นˆ ๊ฐ’์„ ์ฑ„์›Œ์ค„ ๋ฐ์ดํ„ฐ๋ฅผ controller์—์„œ ๋ฐ›์•„์™€์•ผ ํ•จ.

๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ๋‘๊ฐ€์ง€.

1. VO(orderNumList๋ฅผ ๋ณ€์ˆ˜๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ)

2.Map

 

2๋ฒˆ ๋ฐฉ๋ฒ•์ธ Map ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ ๋นˆ ๊ฐ’ ์ฑ„์šฐ๊ธฐ.

์šฐ์„  ๋นˆ ๊ฐ’์€ statusCode์™€ orderNumList์ด๋‹ค.

map ์ƒ์„ฑ ์‹œ ์œ ์˜!

value์— ๋“ค์–ด๊ฐˆ ์ฟผ๋ฆฌ ๋นˆ ๊ฐ’์˜ ์ž๋ฃŒํ˜•์€ int์™€ list 2๊ฐ€์ง€์ด๊ธฐ ๋•Œ๋ฌธ์— object๋กœ ํ•ด์•ผ ํ•จ.

map์— ์ฟผ๋ฆฌ ๋นˆ ๊ฐ’ ๋ฐ์ดํ„ฐ๋ฅผ ์„ธํŒ…ํ•  ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋“ค์–ด๊ฐˆ ๊ฒƒ์„ ์•Œ์•„์•ผ ํ•จ.

//์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹คํ–‰
@ResponseBody
@PostMapping("/changeStatusAjax")
public void changeStatusAjax(){

    //์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ ์ฑ„์›Œ์ค„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๋Š” map ๋ฐ์ดํ„ฐ ์„ธํŒ…
    Map<String, Object> map = new HashMap<>();
    map.put("statusCode", ๋ˆ„๋ฅธ ๋ฒ„ํŠผ์˜ statusCode);
	map.put("orderNumList", ์‹ค์ œ ์ฒดํฌ๋ฐ•์Šค orderNumList);
}

 

๋‹ค์‹œ admin-mapper๋กœ ๋Œ์•„์™€์„œ ์ฟผ๋ฆฌ ์ •ํ™•ํ•˜๊ฒŒ ๋‹ค์‹œ ์ž‘์„ฑ.

map์œผ๋กœ ๋ฐ์ดํ„ฐ ์ฑ„์šธ ๋•Œ ๋นˆ ๊ฐ’์€ map์˜ key๊ฐ€ ๋“ค์–ด์˜จ๋‹ค.

controller์—์„œ key๋กœ ์ ์€ "orderNumList"๋ฅผ ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ ค์„œ ์„ ํƒ๋œ ์ฒดํฌ ๋ฐ•์Šค์˜ orderNum๋“ค์„ ๋ฝ‘์œผ๋ฉด ๋จ!

<!-- ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ -->
<update id="changeStatus">
    UPDATE ORDER_STATUS
    SET
        STATUS_CODE = #{statusCode} <!--map์œผ๋กœ ๋ฐ์ดํ„ฐ ์ฑ„์šธ ๋•Œ ๋นˆ ๊ฐ’์— key๋ช…์ด ๋“ค์–ด์˜ค๋ฉด ๋จ. -->
    WHERE ORDER_NUM IN
    <foreach collection="orderNumList" item="orderNum" open="(" close=")" separator=","> 
        #{orderNum}
    </foreach>
</update>

AdminService ๋ฉ”์†Œ๋“œ ์ž‘์„ฑ

//์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ
void changeStatus(Map<String, Object> map);

AdminServiceImpl ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„

//์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ
@Override
public void changeStatus(Map<String, Object> map) {
    sqlSession.update("adminMapper.changeStatus", map);

}

 

AdminController ๋ฉ”์†Œ๋“œ ์‹คํ–‰

//์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹คํ–‰
@ResponseBody
@PostMapping("/changeStatusAjax")
public void changeStatusAjax(){

    //์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ ์ฑ„์›Œ์ค„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๋Š” map ๋ฐ์ดํ„ฐ
    Map<String, Object> map = new HashMap<>();
    map.put("statusCode", mapData.get("statusCode"));
    map.put("orderNumList", mapData.get("orderNumList"));

    //์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ
    adminService.changeStatus(map);	
}

 

์‹ค์ œ๋กœ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ๋นˆ ๊ฐ’ ์ฑ„์šธ ๋•Œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ controller์—  ๋ณด๋‚ด์ค˜์•ผ ํ•จ.

 

1.statusCode

order_manage.html์„ ๋ณด๋ฉด ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฉด์„œ ์ฃผ๋ฌธ ์ƒํƒœ ๋ฒ„ํŠผ์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Œ.

state๋ฅผ ์ด์šฉํ•˜์—ฌ(๋ฐ˜๋ณต ์ˆœ์„œ๋กœ) ๋นˆ ๊ฐ’ ์ฑ„์šธ statusCode ๋Œ€์ฒด ๊ฐ€๋Šฅ

๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ statusCode๋ฅผ js๋กœ ๋„˜๊ฒจ์คŒ
state.index + 2์ธ ์ด์œ  : ๋ฐ˜๋ณต์€ 0๋ถ€ํ„ฐ ๋Œ๊ณ  statusCode๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— +1,

ํด๋ฆญํ•œ ๋ฒ„ํŠผ์˜ ๋‹ค์Œ ์ฃผ๋ฌธ ์ƒํƒœ์˜ statusCode๋ฅผ ๊ฐ€์ ธ๊ฐ€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— +1

๊ฐœ๋ฐœ์ž ๋ชจ๋“œ ์ผœ๋ณด๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜ statusCode(์ˆซ์ž) ์ž˜ ๋„˜์–ด ๊ฐ€๋Š” ๊ฒƒ ํ™•์ธ ๊ฐ€๋Šฅ.

2.orderNum

์ฒดํฌ๋ฐ•์Šค ํด๋ฆญ ์‹œ value ๊ฐ’(orderNum)์„ ๊ฐ€์ ธ๊ฐ€์•ผ controller์—์„œ ์ฟผ๋ฆฌ ๋นˆ ๊ฐ’ ์ฑ„์šธ ์ˆ˜ ์žˆ์Œ.

๊ฐ ์ฃผ๋ฌธ ์ƒํƒœ๋ณ„ ํ…Œ์ด๋ธ”์˜ ์ฒดํฌ๋ฐ•์Šค๋Š” ์ฃผ๋ฌธ ์ƒํƒœ๋ณ„ ์ฃผ๋ฌธ ๋ชฉ๋ก ์กฐํšŒ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ์ƒ์„ฑ๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ.

์ฒดํฌ ๋ฐ•์Šค๋Š” orderNum ๊ฐ’์„ value๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, 

์ฃผ๋ฌธ์ƒํƒœ๋ณ„ ์ฃผ๋ฌธ ๋ชฉ๋ก ์กฐํšŒ ์‹œ orderNum์„ ์กฐํšŒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ฒดํฌ๋ฐ•์Šค์— orderNum์ธ value๊ฐ’ ๋ชป ๋„ฃ๋Š” ์ƒํƒœ

์ฃผ๋ฌธ์ƒํƒœ๋ณ„ ์ฃผ๋ฌธ ๋ชฉ๋ก ์กฐํšŒ ์ฟผ๋ฆฌ ์ˆ˜์ •ํ•˜์—ฌ orderNum๋„ ์กฐํšŒํ•˜๊ฒŒ ๋ฐ”๊ฟ”์•ผ ํ•จ.

์กฐํšŒํ•œ orderNum ์ฒดํฌ๋ฐ•์Šค์— value๊ฐ’์œผ๋กœ ์„ธํŒ….

๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ์ฒดํฌ๋ฐ•์Šค์— calss ๋ถ€์—ฌ.

์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋‚ด๊ฐ€ ์„ ํƒํ•œ ์ฒดํฌ๋ฐ•์Šค value ๊ฐ’์„ js์—์„œ ๋‹ค ์„ ํƒํ•˜๋ฉด ๋จ.

js ์ž‘์„ฑ ์ „ ์œ ์˜์‚ฌํ•ญ

์ผ๋ฐ˜์ ์ธ ์ฒดํฌ ๋ฐ•์Šค๋“ค์˜ value๋ฅผ ๋“ค๊ณ  ์˜ค๋Š” ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์•ˆ ๋จ.

์ฃผ๋ฌธ์ƒํƒœ๋ณ„๋กœ ๋ชจ๋“  ์ฒดํฌ๋ฐ•์Šค์˜ class๊ฐ€ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ value ๊ฐ’์„ ๋‹ค ๋“ค๊ณ ์˜ค๊ธฐ ๋•Œ๋ฌธ.

๋‚ด๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํ•ด๋‹น ์ฃผ๋ฌธ ์ƒํƒœ ํ…Œ์ด๋ธ”์˜ ์ฒดํฌ๋ฐ•์Šค value๋งŒ ๋“ค๊ณ  ์™€์•ผ ํ•จ.

html์—์„œ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์— ๋‚ด๊ฐ€ ํด๋ฆญํ•œ ๋ฒ„ํŠผ ๊ทธ ์ž์ฒด๋ฅผ this ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ js์— ๋„˜๊น€.

order_manage.js ์ž‘์„ฑ

๋„˜์–ด์˜ค๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์ธ ๋ฒ„ํŠผ๊ณผ statusCode ๋ฐ›๊ธฐ.

ํด๋ฆญํ•œ ๋ฒ„ํŠผ์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด row๋ฅผ ์ฐพ์•„๊ฐ€์„œ row ์•ˆ์˜ ์ฒดํฌ๋œ ์ฒดํฌ๋ฐ•์Šค๋“ค ๋‹ค ์„ ํƒ.

ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ฒดํฌ๋œ ์ฒดํฌ๋ฐ•์Šค๋“ค์˜ value ๊ฐ’์ธ orderNum์ž„.

orderNum ์—ฌ๋Ÿฌ๊ฐœ ๋‹ด์„ ๋ฐฐ์—ด์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฉด์„œ ์ฒดํฌ๋œ ์ฒดํฌ๋ฐ•์Šค๋“ค์˜ value๊ฐ’์ธ orderNum ๋ฝ‘์•„์„œ ๋ฐฐ์—ด์— ์ถ”๊ฐ€

//์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹คํ–‰ btn : ํด๋ฆญํ•œ ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ์ž์ฒด(this)
function changeStatus(btn, statusCode){
	
	//์ฒดํฌ๋œ ์ฒดํฌ๋ฐ•์Šค์˜ value ๊ฐ’(ํด๋ฆญํ•œ ๋ฒ„ํŠผ ํ…Œ์ด๋ธ”(์ฃผ๋ฌธ์ƒํƒœ)์˜ ์ฒดํฌ๋œ ์ฒดํฌ๋ฐ•์Šค๋“ค )
			//ํด๋ฆญํ•œ ๋ฒ„ํŠผ์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํด๋ž˜์Šค๊ฐ€ row์ธ ๊ฒƒ์„ ์ฐพ์•„๊ฐ
	const checkedChks = btn.closest('.row').querySelectorAll('.chk:checked');
	
	const orderNumList = [];
	//๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฉด์„œ ์ฒดํฌ๋œ orderNum์„ ๋ฐฐ์—ด์— ์„ธํŒ….
	for(let i = 0; i < checkedChks.length; i++){
		orderNumList[i] = checkedChks[i].value; //value์— orderNum ์„ธํŒ…๋˜์–ด ์žˆ์Œ. 
	}
	
	console.log(`statusCode = ${statusCode}`);
	console.log(`orderNumList = ${orderNumList}`);
	
	//ajax start
	$.ajax({
		url: '/admin/changeStatusAjax', //์š”์ฒญ๊ฒฝ๋กœ
		type: 'post',
		data: {}, //ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ
		async: true, //default 
		contentType: 'application/json; charset=UTF-8', //json ๋ฐฉ์‹
		//contentType: "application/x-www-form-urlencoded; charset=UTF-8", //default ๋ฐฉ์‹
		success: function(result) {
			
		},
		error: function() {
			alert('์‹คํŒจ');
		}
	});
	//ajax end
}

์ด์ œ ์„ธํŒ…๋œ ๋ฐ์ดํ„ฐ๋ฅผ controller๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด ๋จ.

js์—์„œ controller๋กœ ๋„˜๊ฒจ์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณต์žกํ•  ๊ฒฝ์šฐ json๋ฐฉ์‹ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ!

๋„˜๊ฒจ์•ผ ํ•  ๋ฐ์ดํ„ฐ๋ฅผ paramData๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ  ๋‹ด์•„์ฃผ๊ณ 

json ๋ฌธ์ž์—ด๋กœ paramData๋ฅผ controller๋กœ ๋˜์ง.

//์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹คํ–‰ btn > ๋ฒ„ํŠผ ์ž์ฒด this
function changeStatus(btn, statusCode){
	
	//์ฒดํฌ๋œ ์ฒดํฌ๋ฐ•์Šค์˜ value ๊ฐ’(ํด๋ฆญํ•œ ๋ฒ„ํŠผ ํ…Œ์ด๋ธ”(์ฃผ๋ฌธ์ƒํƒœ)์˜ ์ฒดํฌ๋œ ์ฒดํฌ๋ฐ•์Šค๋“ค )
	const checkedChks = btn.closest('.row').querySelectorAll('.chk:checked');
	
	const orderNumList = [];
	for(let i = 0; i < checkedChks.length; i++){
		orderNumList[i] = checkedChks[i].value; 
	}
	
	console.log(`statusCode = ${statusCode}`);
	console.log(`orderNumList = ${orderNumList}`);
	
	paramData = {
		//key           value
		'statusCode' : statusCode
		, 'orderNumList' : orderNumList
	};
	
	console.log(`paramData = ${paramData}`);
	
	//ajax start
	$.ajax({
		url: '/admin/changeStatusAjax', //์š”์ฒญ๊ฒฝ๋กœ
		type: 'post',
		data: JSON.stringify(paramData), //json ๋ฐฉ์‹์œผ๋กœ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๋„˜๊ธฐ๊ธฐ
		async: true, //default 
		contentType: 'application/json; charset=UTF-8', //json ๋ฐฉ์‹
		//contentType: "application/x-www-form-urlencoded; charset=UTF-8", //default ๋ฐฉ์‹
		success: function(result) {
			alert('ajax ํ†ต์‹  ์„ฑ๊ณต');
		},
		error: function() {
			alert('์‹คํŒจ');
		}
	});
	//ajax end
	
	
}

 

json ๋ฐฉ์‹์œผ๋กœ ๋„˜์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ  controller์—์„œ ๋ฐ›์„ ๋•Œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Map ํ˜•ํƒœ๋กœ ๋ฐ›์œผ๋ฉด ๋จ.

๋ฐ์ดํ„ฐ ๋ฐ›์„ ๋•Œ ์œ ์˜!

map ์ƒ์„ฑ ์ „์— @RequestBody ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์ฃผ๊ณ  ์ƒ์„ฑ

@RequestBody๋ฅผ ๋ถ™์ด๋ฉด controller๋กœ ์ „์†ก๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ map์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์ƒ์„ ํ•œ map์— ์ €์žฅ๋จ.

(map์˜ ์ด๋ฆ„๊ณผ json ๋ฐฉ์‹์œผ๋กœ ๋„˜๊ธด ๋ฐ์ดํ„ฐ ์ด๋ฆ„์ด ๋‹ฌ๋ผ๋„ ์ ์šฉ๋จ.)

js์—์„œ ๋„˜๊ธด json ๋ฐฉ์‹ ๋ฐ์ดํ„ฐ controller๋กœ ๋„˜์–ด์™”๋Š”์ง€ ์‹ค์ œ ์ถœ๋ ฅ์œผ๋กœ ํ™•์ธ ํ•ด๋ณผ ์ˆ˜ ์žˆ์Œ.

//์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹คํ–‰
@ResponseBody
@PostMapping("/changeStatusAjax")
public void changeStatusAjax(@RequestBody HashMap<String, Object> mapData){

    System.out.println(mapData);
    System.out.println("statusCode = " + mapData.get("statusCode"));
    System.out.println("orderNumList = " + mapData.get("orderNumList"));

    //์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ ์ฑ„์›Œ์ค„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๋Š” map ๋ฐ์ดํ„ฐ
    Map<String, Object> map = new HashMap<>();
    map.put("statusCode", mapData.get("statusCode"));
    map.put("orderNumList", mapData.get("orderNumList"));

    //์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ
    adminService.changeStatus(map);

}

์ฝ˜์†”์ฐฝ์„ ๋ณด๋ฉด ๋ฐ์ดํ„ฐ๋„ ์ž˜ ๋„˜์–ด์˜ค๊ณ  ๊ธฐ๋Šฅ ๋™์ž‘๊นŒ์ง€ ๋จ!

 

ํ˜„์žฌ ์ƒˆ๋กœ๊ณ ์นจ ํ•ด์•ผ ์‹ค์ œ๋กœ ๋ˆˆ์— ๋ณด์ด๋Š” ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ํ™”๋ฉด์œผ๋กœ update ๋จ.

ajax ์‹คํ–‰ ํ›„ controller๋กœ ์ด๋™ํ•˜์—ฌ ์ฝ”๋“œ ์‹คํ–‰ ๋‹ค ํ•˜๊ณ  ajax success ๊ตฌ๋ฌธ์œผ๋กœ ๋Œ์•„์˜ฌ ๋•Œ ํŽ˜์ด์ง€๋ฅผ ๊ฐฑ์‹  ํ•ด์ค˜์•ผ ํ•จ.

 

 

ํŽ˜์ด์ง€ ๊ฐฑ์‹ ํ•˜๋Š” updatePageInfo ํ•จ์ˆ˜ ์ž‘์„ฑ

ํŽ˜์ด์ง€ ๊ฐฑ์‹ ํ•  ๋•Œ 

์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ์ฃผ๋ฌธ ๋‚ด์—ญ๋„ ์ง€์›Œ์•ผ ํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ํ…Œ์ด๋ธ”์˜ ์ฃผ๋ฌธ ๋‚ด์—ญ๋„ ์ง€์›Œ์•ผ ํ•จ.

๋‚ด๊ฐ€ ํด๋ฆญํ•œ ๋ฒ„ํŠผ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ด์•ผ ํ•จ.

๋‚ด๊ฐ€ ํด๋ฆญํ•œ ๋ฒ„ํŠผ์€ ์ด๋ฏธ ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ this๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์˜ค๊ณ  ์žˆ๋Š” ์ƒํƒœ.

ํŽ˜์ด์ง€ ๊ฐฑ์‹  ํ•จ์ˆ˜์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ btn ๋„ฃ์–ด์ฃผ๊ณ  ์‚ฌ์šฉ.

ํด๋ฆญํ•œ ๋ฒ„ํŠผ์˜ row๋ฅผ ์ฐพ์•„์„œ ๊ทธ row์˜ ๋ฐ”๋”” ํƒœ๊ทธ์˜ ๋‚ด์šฉ์„ ์ง€์›Œ์ฃผ๋ฉด ๋จ.

//์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ํ›„ ํ…Œ์ด๋ธ” ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ
function updatePageInfo(btn){ 
	//๊ธฐ์กด ํ…Œ์ด๋ธ” ์ฃผ๋ฌธ ๋‚ด์—ญ ์‚ญ์ œ
	const row_1 = btn.closest('.row');
	//ํด๋ฆญํ•œ ๋ฒ„ํŠผ์˜ ํ–‰ ์•ˆ์— ์žˆ๋Š” tbody(์ฃผ๋ฌธ ๋‚ด์—ญ)์„ ์ง€์›Œ์ค˜์•ผ ํ•˜๊ณ  
	row_1.querySelector('tbody').replaceChildren();
	
	//๊ทธ ๋‹ค์Œ row ์•ˆ์˜ tbody๋„ ์ง€์›Œ์ค˜์•ผํ•จ.
	const row_2 = row_1.nextElementSibling;
	row_2.querySelector('tbody').replaceChildren();
}

์ฃผ๋ฌธ๋‚ด์—ญ์ด ์ง€์›Œ์ง„ ํ…Œ์ด๋ธ”๋“ค์—  ๋‹ค์‹œ update๋œ ์ฃผ๋ฌธ ๋‚ด์—ญ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด์„œ ๋ฟŒ๋ ค์ค˜์•ผ ํ•จ.

์ด์ „์— ๋งŒ๋“  ์ฃผ๋ฌธ ์ƒํƒœ๋ณ„ ์ฃผ๋ฌธ ๋‚ด์—ญ ์กฐํšŒํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์žฌ์‚ฌ์šฉ

 

AdminController ์ž‘์„ฑ.

์ฃผ๋ฌธ ์ƒํƒœ๋ณ„ ์ฃผ๋ฌธ ๋‚ด์—ญ ์กฐํšŒ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•ด๋‹น ์ฃผ๋ฌธ ์ƒํƒœ์˜ statusCode๊ฐ€ ํ•„์š”.

ํ˜„์žฌ ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด update ์ฟผ๋ฆฌ ์ž‘๋™ ํ•  ๋•Œ ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ์ฃผ๋ฌธ ์ƒํƒœ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ ธ์˜ด.

์ฟผ๋ฆฌ ์ž‘๋™ ์‹œ statusCode์™€ ๊ฑฐ๊ธฐ์„œ -1ํ•œ ๊ฐ’์ด๋ฉด ๊ทธ๋ ค์ค˜์•ผ ํ•  2๊ฐœ ํ…Œ์ด๋ธ”์˜ statusCode ๊ฐ’ ์–ป์„ ์ˆ˜ ์žˆ์Œ.

statusCode๋Š” ์ž๋ฃŒํ˜•์ด int๊ณ  statusCode์— ๋Œ€ํ•œ ์ •๋ณด๋Š” json๋ฐฉ์‹์œผ๋กœ ๋„˜๊ฒจ์„œ ๋ฐ›์€ mapData ์•ˆ์— ์žˆ์Œ.

> value ๊ฐ’์€ object ์ž๋ฃŒํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฃŒํ˜• ๋ณ€ํ™˜์ด ํ•„์š”.

//์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹คํ–‰
@ResponseBody
@PostMapping("/changeStatusAjax")
public Map<String, List<OrderStatusVO>> changeStatusAjax(@RequestBody HashMap<String, Object> mapData){

    System.out.println(mapData);
    System.out.println("statusCode = " + mapData.get("statusCode"));
    System.out.println("orderNumList = " + mapData.get("orderNumList"));


    //์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ ์ฑ„์›Œ์ค„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๋Š” map ๋ฐ์ดํ„ฐ
    Map<String, Object> map = new HashMap<>();
    map.put("statusCode", mapData.get("statusCode"));
    map.put("orderNumList", mapData.get("orderNumList"));

    //์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ
    adminService.changeStatus(map);

    //๋ณ€๊ฒฝ ํ›„ ํ™”๋ฉด์— ๋ณด์—ฌ์ค˜์•ผํ•  ๋ฆฌ์ŠคํŠธ ๋ชฉ๋ก 2๊ฐœ
    //map์— ๋‹ด์•„์„œ ๋ฆฌํ„ดํ•˜๊ธฐ ์œ„ํ•œ ํ†ต
    Map<String, List<OrderStatusVO>> result = new HashMap<>(); 

    //statusCode๋Š” ์ž๋ฃŒํ˜•์ด int๊ณ  statusCode์— ๋Œ€ํ•œ ์ •๋ณด๋Š” mapData ์•ˆ์— ์žˆ์Œ.
    //value ๊ฐ’์€ object ์ž๋ฃŒํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฃŒํ˜• ๋ณ€ํ™˜์ด ํ•„์š”.
    int afterStatusCode = Integer.parseInt(mapData.get("statusCode").toString());
    int beforeStatusCode = afterStatusCode - 1;
    //์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ํ›„ ์ฃผ๋ฌธ ๋‚ด์—ญ ์žฌ์กฐํšŒํ•œ ๊ฒƒ map์— ๋ฐ์ดํ„ฐ ์„ธํŒ…
    result.put("firstOrderList", adminService.getOrderListByStatus(beforeStatusCode));
    result.put("secondOrderList", adminService.getOrderListByStatus(afterStatusCode));

    return result;
}

์ฃผ๋ฌธ ์ƒํƒœ์— ๋”ฐ๋ฅธ ์ฃผ๋ฌธ ๋‚ด์—ญ ์กฐํšŒํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉํ•˜์—ฌ  statusCode ์„ธํŒ….

๋‘๊ฐœ์˜ ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ map ์ƒ์„ฑ, ์กฐํšŒ๋œ ๋ฐ์ดํ„ฐ map์— ๋‹ด์•„์ค€ ํ›„ js๋กœ return

 

ํŽ˜์ด์ง€ ๊ฐฑ์‹ ํ•˜๋Š” updatePageInfo ํ•จ์ˆ˜๋ฅผ success ๊ตฌ๋ฌธ์—์„œ ์‹คํ–‰์‹œ์ผœ์ฃผ๊ธฐ.

ajax์—์„œ result๋กœ ๋ฐ›์€ ์ฃผ๋ฌธ ๋‚ด์—ญ ๋ฆฌ์ŠคํŠธ map ๋ฐ์ดํ„ฐ๋ฅผ success ๊ตฌ๋ฌธ์—์„œ ํŽ˜์ด์ง€ ๊ฐฑ์‹  ํ•จ์ˆ˜ ์‹คํ–‰ํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ.

์ž‘์„ฑํ•œ ํŽ˜์ด์ง€ ๊ฐฑ์‹  ํ•จ์ˆ˜์—๋„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ถ”๊ฐ€!

์ง€์›Œ์ง„ ํ…Œ์ด๋ธ” (์ฃผ๋ฌธ ๋‚ด์—ญ)๋‹ค์‹œ ๊ทธ๋ ค์ฃผ๊ธฐ.

์ด 2๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ๊ทธ๋ ค์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ๋งŒ๋“ค์–ด์„œ 2๋ฒˆ ํ•จ์ˆ˜ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋จ.

//์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ํ›„ ํ…Œ์ด๋ธ” ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ
function updatePageInfo(btn, result){ //result์— ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ํ›„ ์ฃผ๋ฌธ ๋‚ด์—ญ ๋ฆฌ์ŠคํŠธ mapํ˜•ํƒœ๋กœ ๋“ค์–ด์žˆ์Œ.
	//๊ธฐ์กด ํ…Œ์ด๋ธ” ์ฃผ๋ฌธ ๋‚ด์—ญ ์‚ญ์ œ
	const row_1 = btn.closest('.row');
	//ํด๋ฆญํ•œ ๋ฒ„ํŠผ์˜ ํ–‰ ์•ˆ์— ์žˆ๋Š” tbody(์ฃผ๋ฌธ ๋‚ด์—ญ)์„ ์ง€์›Œ์ค˜์•ผ ํ•˜๊ณ  
	row_1.querySelector('tbody').replaceChildren();
	
	//๊ทธ ๋‹ค์Œ row ์•ˆ์˜ tbody๋„ ์ง€์›Œ์ค˜์•ผํ•จ.
	const row_2 = row_1.nextElementSibling;
	row_2.querySelector('tbody').replaceChildren();
	
	//ํ…Œ์ด๋ธ” ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ(result-map์—๋Š” 2๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ์Œ))
	drawTable(row_1.querySelector('tbody'), result['firstOrderList']);
	drawTable(row_2.querySelector('tbody'), result['secondOrderList']);
}

 

ํ…Œ์ด๋ธ” ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” drawTable ํ•จ์ˆ˜ ์ž‘์„ฑ

ํ…Œ์ด๋ธ”์„ ๊ทธ๋ฆด ๋•Œ ์ง€์ •ํ•˜๋Š” ์œ„์น˜ ๋ถ€๋ชจ ํƒœ๊ทธ๋Š” ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ด๋ธ” ๊ทธ๋ฆฌ๋Š” ํ•จ์ˆ˜์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•ด์„œ p_tag๋กœ ๋ฐ›์•„์คŒ.

ํ…Œ์ด๋ธ”์„ ๊ทธ๋ฆฌ๋Š”๋ฐ ํ•„์š”ํ•œ result(์ฃผ๋ฌธ ์ƒํƒœ๋ณ„ ์ฃผ๋ฌธ ๋‚ด์—ญ ์กฐํšŒ ๋ฆฌ์ŠคํŠธ)๋„ ์ „๋‹ฌ

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฉด์„œ ํ…Œ์ด๋ธ” ๊ทธ๋ฆฌ๊ธฐ

js์—์„œ th๋ฌธ๋ฒ• ํ•ด์„ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— orderNum ๋ถ€๋ถ„์€  value๋กœ ๋ฐ”๊ฟ”์„œ ์ฝ”๋“œ ์ž‘์„ฑํ•ด์•ผ ํ•จ.

ํ•ด๋‹น ์ฃผ๋ฌธ ์ƒํƒœ๋ณ„ ํ…Œ์ด๋ธ”์— ์กฐํšŒ๋œ ๋ฐ์ดํ„ฐ ์—†์„ ๋•Œ๋Š” ๋ฐ์ดํ„ฐ ์—†๋‹ค๋Š” ๋ฌธ๊ตฌ if๋ฌธ์œผ๋กœ ๋ฟŒ๋ ค์ฃผ๊ธฐ

//์ง€์›Œ์ง„ ์ฃผ๋ฌธ ๋‚ด์—ญ ํ…Œ์ด๋ธ” ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ
function drawTable(p_tag, draw_data){
	let str = '';
	
	if(draw_data.length == 0){
		str += `<tr>`;
		str += `<td>์กฐํšŒ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.</td>`;
		str += `</tr>`;
		
		//๊ทธ๋ฆผ์ด ๊ทธ๋ ค์งˆ ๋ถ€๋ชจ ํƒœํฌ
		p_tag.insertAdjacentHTML('afterbegin', str);
		
	}
	else{
		//html์˜ ์ฃผ๋ฌธ ๋‚ด์—ญ ๋ฐ์ดํ„ฐ ๋ฝ‘๋Š” ๋ฐ˜๋ณต๋ฌธ๊ณผ ๋ณ€์ˆ˜ ์ด๋ฆ„ ๋งž์ถฐ์คŒ.(๋ฐ์ดํ„ฐ ๋‹ค์‹œ ๊ทธ๋ฆด ๋•Œ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ)
		draw_data.forEach(function(orderInfo, index){
			
			str += `<tr>`;
			str += `<td><input class="form-check-input chk" type="checkbox" value="${orderInfo.orderNum}"></td>`;
			str += `<td>${draw_data.length - index}</td>`;
			str += `<td>${orderInfo.buyCode}</td>`;
			str += `<td>${orderInfo.buyVO.memId}</td>`;
			str += `<td>${orderInfo.memberVO.memTell}</td>`;
													//js์—์„œ ํ™”ํ ๋‹จ์œ„ ์“ฐ๋Š” ์ฝ”๋“œ 
			str += `<td>${orderInfo.buyVO.buyPrice.toLocaleString('ko-KR', { style: 'currency', currency: 'KRW' })}</td>`;
			str += `<td>${orderInfo.statusInfoVO.statusName}</td>`;
			str += `<td>${orderInfo.updateDate}</td>`;
			str += `</tr>`;
			
		});
		
		//๊ทธ๋ฆผ์ด ๊ทธ๋ ค์งˆ ๋ถ€๋ชจ ํƒœํฌ
		p_tag.insertAdjacentHTML('afterbegin', str);
	}
}