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);
}
}