2023. 3. 22. 17:27ใSpring
ํ์ด์ง ์ด๋์์ด Controller๋ก ์ด๋ํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ํ๊ณ ์ถ์ ๋ > ajax ์ฌ์ฉ.
select ๋ฐ์ค ๊ฐ ๋ณ๊ฒฝ ์ ๋ณ๊ฒฝํ ๋ฐ์ ํ์ ๋ชฉ๋ก ์กฐํ ๋๊ฒ ๊ตฌํ
select ๋ฐ์ค ์ ํํ ๋๋ง๋ค > onchange ์์ฑ์์ ํจ์ ๋ง๋ค์ด์ค.
<select id="classSelect" onchange="getStuList();">
<option value="">์ ์ฒด</option>
<th:block th:each="classInfo : ${classList}">
<option th:value="${classInfo.classCode}">[[${classInfo.className}]]</option>
</th:block>
</select>
๋ชฉ๋ก ์กฐํ๋ฅผ ์ํด ์ฟผ๋ฆฌ ์์ฑ
<!-- ajax ์ฌ์ฉํ์ฌ select ๋ฐ์ค ๋ณ๊ฒฝํ ํ์ ๋ชฉ๋ก ์กฐํ -->
<select id="getStuListAjax" resultMap="stu">
SELECT STU_NUM
, STU_NAME
, STU_AGE
, CLASS_NAME
FROM AJAX_STUDENT STU, CLASS_INFO CLS
WHERE STU.CLASS_CODE = CLS.CLASS_CODE
WHERE CLS.CLASS_CODE = #{classCode}
ORDER BY CLASS_NAME, STU_NAME
</select>
service, serviceImpl ๋ฉ์๋ ์์ฑ, ๊ตฌํ
Controller์์ ๋ฉ์๋ ์คํํ๋ ค๋ฉด classCode ํ์ํจ.
js์์ ajax ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ฐ์ ์ค๋ฉด ๋จ.
๋จผ์ select ๋ฐ์ค์ id ๋ถ์ฌํ ๊ฒ์ผ๋ก js์์ value ๋ฐ์์ด.
๋ณ์๋ก ์ ์ฅํ์ฌ ajax์์ ๋ฐ์ดํฐ ๋ณด๋ด์ค.
//์
๋ ํธ ๋ฐ์ค ๊ฐ ๋ณ๊ฒฝ ์ ํ์ ๋ชฉ๋ก ์กฐํ
function getStuList(){
//selectํ ํ๊ธ ๊ฐ
const classCode = document.querySelector('#classSelect').value;
//ajax start
$.ajax({
url: '/stu/listAjax', //์์ฒญ๊ฒฝ๋ก
type: 'post',
data: {'classCode' : classCode}, //ํ์ํ ๋ฐ์ดํฐ
success: function(result) {
alert('ajax ํต์ ์ฑ๊ณต');
},
error: function() {
alert('์คํจ');
}
});
//ajax end
}
Controller์์ js๊ฐ ๋ณด๋ธ ๋ฐ์ดํฐ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ณ ๋ฉ์๋ ์คํ.
//ํ๊ธ ์
๋ ํธ ๋ฐ์ค ๋ณ๊ฒฝ ์ ํ์ ๋ชฉ๋ก ajax๋ก ์กฐํ
@ResponseBody
@PostMapping("/listAjax")
public void listAjax(String classCode) { //js์์ ๋์ง ๋ฐ์ดํฐ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ธฐ
//select ๋ฐ์ค๋ก ์ ํํ ํ๊ธ์ ํ์ ๋ชฉ๋ก ์กฐํ
studentService.getStuListAjax(classCode);
}
ํ์ฌ๊น์ง select ๋ฐ์ค์์ ํ๊ธ ์ ํํ๋ฉด ํ๋ฉด์ ๋ฐ๋์ง ์์.
consol์ฐฝ์์ ์ ํ๋ ํ๊ธ์ ํ์ ๋ชฉ๋ก ์กฐํ ๋๋ ๊ฒ ํ์ธ ๊ฐ๋ฅ
ํ๋ฉด๋ ๋ฐ๊พธ๊ธฐ ์ํด ํ๋ฉด์์์ ์ ๋ชฉ ์ค ๋นผ๊ณ ํ ์ด๋ธ์ ๋ฐ์ ๋ด์ฉ ๋ถ๋ถ ๋ค ์ง์ฐ๊ธฐ.
์ง์ด ๊ณต๊ฐ์ ๋ค์ ์ ํํ ํ๊ธ ๋ชฉ๋ก ์กฐํ ๋ฐ์ดํฐ ์ฑ์ฐ๊ธฐ
//์
๋ ํธ ๋ฐ์ค ๊ฐ ๋ณ๊ฒฝ ์ ํ์ ๋ชฉ๋ก ์กฐํ
function getStuList(){
//selectํ ํ๊ธ ๊ฐ
const classCode = document.querySelector('#classSelect').value;
//ajax start
$.ajax({
url: '/stu/listAjax', //์์ฒญ๊ฒฝ๋ก
type: 'post', //์์์ ๋ฐ์์จ ํ๊ธ ๊ฐ ๋ณ์
data: {'classCode' : classCode}, //Controller์ ํ์ํ ๋ฐ์ดํฐ ๋ณด๋ด์ฃผ๊ธฐ
success: function(result) {
//ํ์ ๋ชฉ๋ก ํ
์ด๋ธ์ ๋ชจ๋ ๋ด์ฉ ์ญ์
const tbodyTag = document.querySelector('.stuListTable > tbody')
//๋ถ๋ชจํ๊ทธ.replaceChildren(); -> ์ ํํ ๋ถ๋ชจ ํ๊ทธ ์์์ ()์์ ๋ค์ด์จ ์์ ํ๊ทธ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ธฐ๋ฅ,
//()์์ ๋น์ฐ๋ฉด ์ ํํ ๋ถ๋ชจ ํ๊ทธ ์์ ๋ชจ๋ ์์ ํ๊ทธ ์ญ์
tbodyTag.replaceChildren();
},
error: function() {
alert('์คํจ');
}
});
//ajax end
}
Controller์์ selectํ ํ๊ธ์ ํ์ ๋ชฉ๋ก ์กฐํ ๋ฐ์ดํฐ return ํด์ฃผ๊ธฐ
//ํ๊ธ ์
๋ ํธ ๋ฐ์ค ๋ณ๊ฒฝ ์ ํ์ ๋ชฉ๋ก ajax๋ก ์กฐํ
@ResponseBody
@PostMapping("/listAjax")
public List<StudentVO> listAjax(String classCode) { //js์์ ๋์ง ๋ฐ์ดํฐ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ธฐ
//select ๋ฐ์ค๋ก ์ ํํ ํ๊ธ์ ํ์ ๋ชฉ๋ก ์กฐํ
return studentService.getStuListAjax(classCode);
}
returnํด์ค ๋ฐ์ดํฐ๋ฅผ js์์ result๊ฐ์ผ๋ก ๋ค๊ณ ์ฌ ์ ์๋ค.
js์์ ํ ์ด๋ธ ๋ง๋ค์ด์ result๊ฐ๋ก ํ ์ด๋ธ์ ๋ค์ ์ฑ์์ฃผ๋ฉด ๋จ.
**์กฐํ๋ ํ๊ธ์ ํ์ ์๋งํผ (result์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ ์๋งํผ) tr ๋ง๋ค์ด์ผ ๋จ > for๋ฌธ
ํ๊ทธ ์ถ๊ฐ ๋ฌธ๋ฒ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ ์ถ๊ฐ
for๋ฌธ ๋๋ฆด ๋ ๊ธฐ๋ณธ for๋ฌธ์ ์ฌ์ฉ. i๊ฐ ์ด์ฉํ์ฌ No ๋ถ๋ถ ์ฑ์์ค.
//์
๋ ํธ ๋ฐ์ค ๊ฐ ๋ณ๊ฒฝ ์ ํ์ ๋ชฉ๋ก ์กฐํ
function getStuList(){
//selectํ ํ๊ธ ๊ฐ
const classCode = document.querySelector('#classSelect').value;
//ajax start
$.ajax({
url: '/stu/listAjax', //์์ฒญ๊ฒฝ๋ก
type: 'post', //์์์ ๋ฐ์์จ ํ๊ธ ๊ฐ ๋ณ์
data: {'classCode' : classCode}, //Controller์ ํ์ํ ๋ฐ์ดํฐ ๋ณด๋ด์ฃผ๊ธฐ
success: function(result) {
//ํ์ ๋ชฉ๋ก ํ
์ด๋ธ์ ๋ชจ๋ ๋ด์ฉ ์ญ์
const tbodyTag = document.querySelector('.stuListTable > tbody')
//๋ถ๋ชจํ๊ทธ.replaceChildren(); -> ์ ํํ ๋ถ๋ชจ ํ๊ทธ ์์์ ()์์ ๋ค์ด์จ ์์ ํ๊ทธ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ธฐ๋ฅ,
//()์์ ๋น์ฐ๋ฉด ์ ํํ ๋ถ๋ชจ ํ๊ทธ ์์ ๋ชจ๋ ์์ ํ๊ทธ ์ญ์
tbodyTag.replaceChildren();
//์ ํํ ํ๊ธ ๋ชฉ๋ก์ด ์กฐํ๋ ๋ฐ์ดํฐ๋ก ๋ค์ ํ
์ด๋ธ์ ๋ด์ฉ์ ์ฑ์ด๋ค.
//์กฐํ๋ ํ๊ธ์ ํ์ ์๋งํผ (result์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ ์๋งํผ) tr ๋ง๋ค์ด์ผ ๋จ > for๋ฌธ
let str = '';
/*๊ฐ๋จํ์ง๋ง ๋ช๋ฒ์งธ ๋๋์ง ์ ์ ์์
for(const stu of result){
str += '<tr>';
str += '<td></td>';
str += `<td>${stu.className}</td>`;
str += `<td>${stu.stuName}</td>`;
str += `<td>${stu.stuAge}</td>`;
str += '</tr>';
}
*/
//๊ธฐ๋ณธ for๋ฌธ ์ฌ์ฉ(No ์ฑ์ฐ๊ธฐ ์ํด์ i๊ฐ ์ฌ์ฉ)
for(let i = 0; i < result.length ; i++){
str += '<tr>';
str += `<td>${i + 1}</td>`; //์ญ์์ผ๋ก ํ๊ณ ์ถ์ ๋ result.length - i
str += `<td>${result[i].className}</td>`;
str += `<td><a href="javascript:void(0)" onclick="getScore(${result[i].stuNum});">${result[i].stuName}</a></td>`;
str += `<td>${result[i].stuAge}</td>`;
str += `<td><input type="button" value="์ญ์ " onclick="goDelete(${result[i].stuNum}, this);"></td>`;
str += '</tr>';
}
//tag.insertAdjacentHTML(‘์ถ๊ฐํ ์์น’, ‘์ถ๊ฐํ ํ๊ทธ’)
tbodyTag.insertAdjacentHTML('afterbegin', str) //์ ํํ ํ๊ทธ๊ฐ ์์๋์ ๋ง์ ํ๊ทธ๋ฅผ ์ถ๊ฐ
},
error: function() {
alert('์คํจ');
}
});
//ajax end
}
ํ์ฌ๊น์ง ํ๊ธ์ ์ ํํ๋ฉด ํ๊ธ์ ํ์ ๋ชฉ๋ก ์กฐํ ๋จ.
๊ทธ๋ฌ๋ select ๋ฐ์ค ์ ์ฒด๋ก ์ ํํ๋ฉด ๋ฐ์ดํฐ ์ ๋ฌ๋ค.
์ฟผ๋ฆฌ๋ฌธ ์์ .
์ ์ฒด๋ฅผ ์ ํํ๋ฉด ์ฟผ๋ฆฌ ์คํ x ๊ทธ ์ธ์ ์ฟผ๋ฆฌ ์คํ > ์ฟผ๋ฆฌ๋ฌธ์ if๋ฌธ ์ฌ์ฉ
<!-- ajax ์ฌ์ฉํ์ฌ select ๋ฐ์ค ๋ณ๊ฒฝํ ํ์ ๋ชฉ๋ก ์กฐํ -->
<select id="getStuListAjax" resultMap="stu">
SELECT STU_NUM
, STU_NAME
, STU_AGE
, CLASS_NAME
FROM AJAX_STUDENT STU, CLASS_INFO CLS
WHERE STU.CLASS_CODE = CLS.CLASS_CODE <!-- ๋ฌธ์์ด ๋น๊ต ์๋ฐ์ ๋์ผํ๊ฒ equals-->
<!-- if๋ฌธ์ test="" ๋์ '' ์ฐ๋ ์ด์ ๋ฌธ์์ด ๋น๊ต ์ ""๋ฃ์ด์ผ ๋จ (if๋ฌธ์ test="" ๋ฃ์ผ๋ฉด ๋ฌธ์์ด ๋น๊ต์ "" ์ธ์x -->
<!-- if๋ฌธ ์์์๋ getter๋ฅผ ํธ์ถํจ. classCode๋ String์ด๊ธฐ ๋๋ฌธ์ getter ์์ > ์ค๋ฅ. 1. ๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ฃผ๋ฉด getter๋ก ๋ฐ์ ์ ์์-->
<if test='_parameter != null and !_parameter.equals("")'>
AND CLS.CLASS_CODE = #{_parameter} <!-- 2. ํ๋์ ๋ฐ์ดํฐ ๋๊ฒจ์ค ๋๋ _parameter(๋น๊ฐ ์ฑ์ฐ๊ธฐ ์ํด ๋์ด์จ ๋ฐ์ดํฐ๋ฅผ ๋ค๊ณ ์ด) -->
</if>
ORDER BY CLASS_NAME, STU_NAME
</select>
์ ์ฒด๋ฅผ ์ ํํ์ ๋ ์ฝ์์ ์ฟผ๋ฆฌ ๋ณด๋ฉด and ์กฐ๊ฑด์ด ๋น ์ง ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํ์๋ช ํด๋ฆญ ์ ์ฐ์ธก ๋น๊ณต๊ฐ์ ํด๋น ํ์์ ์ ์ ์ ๋ณด ์กฐํ
ํ์๋ช ๋์ค๋ ํ๊ทธ์ aํ๊ทธ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ href ์์ฑ ์ฌ์ฉ X > ํ์ด์ง ์ด๋ ๋จ.
aํ๊ทธ์๋ onclick ์์ฑ ์ฌ์ฉ ๊ฐ๋ฅ ์๋์ฒ๋ผ href์ ์์ฑํ๋ฉด ํ์ด์ง ์ด๋ ๊ธฐ๋ฅ ์๋X
<td><a href="javascript:void(0);" onclick="getScore();">[[${stu.stuName}]]</a></td>
์ฟผ๋ฆฌ ์์ฑ์ STU_NAME ํ์ resultMap์ ์ถ๊ฐ ScoreVO์๋ ์ถ๊ฐ
<select id="getScore" resultMap="score">
SELECT SCORE_NUM
, KOR_SCORE
, ENG_SCORE
, MATH_SCORE
, (SELECT STU_NAME
FROM AJAX_STUDENT
WHERE STU_NUM = STUDENT_SCORE.STU_NUM) AS STU_NAME
FROM STUDENT_SCORE
WHERE STU_NUM = #{stuNum}
</select>
ํ์๋ช ํด๋ฆญํ๋ฉด stuNum๋ ๊ฐ์ด ๊ฐ์ง๊ณ ์์ผ ๋จ. > ์ฟผ๋ฆฌ ๋น ๊ฐ ์ฑ์์ฃผ๊ธฐ ์ํด
<td><a href="javascript:void(0);" th:onclick="getScore([[${stu.stuNum}]]);">[[${stu.stuName}]]</a></td>
js์ ํจ์ ์์ฑ ํ ajax ์ฌ์ฉ
html์์ ๋๊ฒจ์ค stuNum ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ณ Controller์์ stuNum ์ฌ์ฉํ๊ธฐ ์ํด ๋ฐ์ดํฐ ๋๊ฒจ์ค.
//ํ์ ์ด๋ฆ ํด๋ฆญ ์ ํ์ ์ ์ ์กฐํ
function getScore(stuNum){
//ajax start
$.ajax({
url: '/score/getScore', //์์ฒญ๊ฒฝ๋ก
type: 'post',
data: {'stuNum' : stuNum}, //Controller์ ํ์ํ ๋ฐ์ดํฐ ๋๊ฒจ์ค
success: function(result) {
},
error: function() {
alert('์คํจ');
}
});
//ajax end
}
ScoreController์์ ์ฑ์ ์กฐํ ๋ฉ์๋ ์คํํ์ฌ js๋ก return
@Controller
@RequestMapping("/score")
public class ScoreController {
@Resource(name = "scoreService")
private ScoreService scoreService;
//ํ์๋ช
ํด๋ฆญ ์ ์ฑ์ ์กฐํ
@ResponseBody //ํ์ด์ง ์ด๋X์ธ ๊ฒ ์ง์
@PostMapping("/getScore")
public ScoreVO getStuScore(int stuNum) {
return scoreService.getScore(stuNum);
}
}
html๋ก ๋์์์ score์ ๋ณด๊ฐ ๋์ฌ ๊ณต๊ฐ div๋ก ๋ง๋ ํ js์์ ํ ์ด๋ธ ๊ทธ๋ฆฌ๊ณ
ํ๊ทธ ์ถ๊ฐํด์ ํ ์ด๋ธ ๋์ค๊ฒ
ํ๊ท ์ ๋ฏธ๋ฆฌ ๊ตฌํด์ ๋ณ์๋ก ์ค
//ํ์ ์ด๋ฆ ํด๋ฆญ ์ ํ์ ์ ์ ์กฐํ
function getScore(stuNum){
//ajax start
$.ajax({
url: '/score/getScore', //์์ฒญ๊ฒฝ๋ก
type: 'post',
data: {'stuNum' : stuNum}, //Controller์ ํ์ํ ๋ฐ์ดํฐ ๋๊ฒจ์ค
success: function(result) {
const divTag = document.querySelector('.scoreDiv')
//์ ์ ํ๊ท
const avg = (result.korScore + result.engScore + result.mathScore) / 3
//์ ์ ์ ๋ณด ๋์ฌ ํ
์ด๋ธ
let str = '';
str += ` <table> ` ;
str += ` <tr> ` ;
str += ` <td>์ด๋ฆ</td> ` ;
str += ` <td>${result.stuName}</td>` ;
str += ` </tr> ` ;
str += ` <tr> ` ;
str += ` <td>๊ตญ์ด์ ์</td> ` ;
str += ` <td>${result.korScore}</td>` ;
str += ` </tr> ` ;
str += ` <tr> ` ;
str += ` <td>์์ด์ ์</td> ` ;
str += ` <td>${result.engScore}</td>` ;
str += ` </tr> ` ;
str += ` <tr> ` ;
str += ` <td>์ํ์ ์</td> ` ;
str += ` <td>${result.mathScore}</td>` ;
str += ` </tr> ` ;
str += ` <tr> ` ;
str += ` <td>ํ๊ท </td> ` ;
str += ` <td>${avg}</td> ` ;
str += ` </tr> ` ;
str += ` </table> ` ;
divTag.replaceChildren();
divTag.insertAdjacentHTML('afterbegin', str);
},
error: function() {
alert('์คํจ');
}
});
//ajax end
}
ํ์ฌ ์ํ์์ ๋ฌธ์
1. ์ ์ฒด ๋ฐ์ดํฐ์์ ์ด๋ฆ ํด๋ฆญ ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฌ๋ select ๋ฐ์ค๋ก ํ๊ธ ๋ฐ๊พธ๋ฉด ์ด๋ฆ ํด๋ฆญ ๋ถ๊ฐ
๊ฐ๋ฐ์๋ชจ๋๋ก ํ์ธํ๋ฉด ํ๊ธ ๋ฐ๊พธ๋ฉด aํ๊ทธ ์ฝ๋๊ฐ ์์.
> js์ ajax์์ for๋ฌธ ๋๋ฉด์ ๊ทธ๋ฅ ํ ์ด๋ธ๋ง ๊ทธ๋ ค์ค. aํ๊ทธ ์๋ ์ํ์.
ajax์์ ๋ง๋ ํ ์ด๋ธ๋ aํ๊ทธ ์ถ๊ฐํด์ค์ผํ๋ค.
2. db์ ์๋ ํ์์ ์ ์๋ฅผ ์กฐํํ๋ฉด undefined(์ค๋ฅ) ๋ธ
์๋ฅผ ๋ค์ด ์์คํ ์์ผ๋ก ๋ณด๋ฉด ์ฑ์ ์ ์ ํ ํ์์ ์ ์๊ฐ 0์ผ๋ก ๋จ๊ฒ ์ค์ .
์ฟผ๋ฆฌ ์์ ํด์ผ ํจ.
์์ ์ด์ : ์ด์ ์์ฑํ ์ฟผ๋ฆฌ๋ ์ ์ ์๋ ํ์ ์กฐํ ๋ชป ํ๊ธฐ ๋๋ฌธ์
<select id="getScore" resultMap="score">
SELECT SCORE_NUM
, NVL(KOR_SCORE, 0) KOR_SCORE
, NVL(ENG_SCORE, 0) ENG_SCORE
, NVL(MATH_SCORE, 0) MATH_SCORE
, STU_NAME
FROM STUDENT_SCORE SCORE, AJAX_STUDENT STU
WHERE SCORE.STU_NUM(+) = STU.STU_NUM
<!-- SCORE ํ
์ด๋ธ์๋ 11๋ฒ์ด ์์ด์ ๋ฐ์ดํฐ ์ ๋์ด. > (+)์ถ๊ฐ : NULL ๋์ด > 0์ผ๋ก ๋ฐ๊พธ๊ธฐ -->
AND STU.STU_NUM = #{stuNum}
</select>
ajax ์ฌ์ฉํ์ฌ ํ์ ์ญ์ ๊ธฐ๋ฅ
html์ ์ญ์ ๋ฒํผ input ํ๊ทธ๋ก ์ถ๊ฐ onclick ์์ฑ์ผ๋ก js๋ก ์ด๋, ํด๋น ํ์ ์ญ์ > stuNum ๋๊ฒจ์ค๋ค.
ํ์ ์ญ์ ๋ฉ์๋ ์คํ ํ js๋ก ๋์์์ ์ญ์ ํ ํ์์ด ํ๋ฉด์์ ์ง์์ง๊ฒ ์์ .
์ญ์ ๋ฒํผ์ ๊ธฐ์ค์ผ๋ก ์ง์ธ ํ๊ทธ ์ฐพ์๊ฐ๊ธฐ ์ํด ์ญ์ ๋ฒํผ ํ๊ทธ ์์ฒด๋ฅผ this๋ก ๋๊ฒจ์ค๋ค.
<tbody>
<tr th:each="stu, state : ${stuList}">
<td>[[${state.count}]]</td>
<td>[[${stu.className}]]</td>
<td><a href="javascript:void(0);" th:onclick="getScore([[${stu.stuNum}]]);">[[${stu.stuName}]]</a></td>
<td>[[${stu.stuAge}]]</td>
<td><input type="button" value="์ญ์ " th:onclick="goDelete([[${stu.stuNum}]], this);"></td>
</tr>
</tbody>
js ํ์ ์ญ์ ํจ์ ์์ฑ.
html์์ ๋๊ฒจ์ค ๋ ๋ฐ์ดํฐ stuNum, this๋ฅผ js์์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์์ค.
Controller๋ก ์ด๋ํ๋ฉด์ stuNum ๊ฐ์ ธ๊ฐ๊ธฐ(์ฟผ๋ฆฌ ๋น๊ฐ ์ฑ์์ฃผ๊ธฐ ์ํด)
//ํ์ ์ญ์ ๋ด๊ฐ ํด๋ฆญํ ์ญ์ ๋ฒํผ(this)
function goDelete(stuNum, selectedTag){
//ajax start
$.ajax({
url: '/stu/stuDelete', //์์ฒญ๊ฒฝ๋ก
type: 'post',
data: {'stuNum' : stuNum}, //ํ์ํ ๋ฐ์ดํฐ
success: function(result) {
},
error: function() {
alert('์คํจ');
}
});
//ajax end
}
StudentMapper๋ก ๊ฐ์ ํ์ ์ญ์ ์ฟผ๋ฆฌ ์์ฑ.
<!-- ํ์ ์ญ์ -->
<delete id="stuDelete">
DELETE AJAX_STUDENT
WHERE STU_NUM = #{stuNum}
</delete>
StudentService์ ๋ฉ์๋ ์์ฑ
//ํ์ ์ญ์ (ajax)
int stuDelete(int stuNum);
StudentServiceImpl ๋ฉ์๋ ๊ตฌํ
//ํ์ ์ญ์ (ajax)
@Override
public int stuDelete(int stuNum) {
return sqlSession.delete("stuMapper.stuDelete", stuNum);
}
StudentController๋ก ์์ ๋ฉ์๋ ์คํ
//ํ์ ์ญ์
@ResponseBody
@PostMapping("/stuDelete")
public int stuDelete(int stuNum) {
//์๋ฃํ int > 1ํ์ด ์ญ์ > return ๊ฐ 1์ด ๋จ.
return studentService.stuDelete(stuNum);
}
๋ฉ์๋ ์คํ ํ js๋ก ๋์์ ์ญ์ ํ์ ํ๋ฉด์์ ์ง์ฐ๋ ์์ ํด์ฃผ๊ธฐ.
๋ด๊ฐ ํด๋ฆญํ ์ญ์ ๋ฒํผ์ ๊ธฐ์ค์ผ๋ก ํ๊ทธ๋ฅผ ์ ํํ์ฌ ๊ทธ ํ๊ทธ ์ง์์ฃผ๋ฉด ํ๋ฉด์์์๋ ํ์ ์ญ์ ๋จ.
ํ๊ทธ ์ฐพ์๊ฐ๋ ๋ฐฉ๋ฒ 2๊ฐ์ง, ํธํ ๊ฒ ์ฌ์ฉ.
//ํ์ ์ญ์ ๋ด๊ฐ ํด๋ฆญํ ์ญ์ ๋ฒํผ(this)
function goDelete(stuNum, selectedTag){
//ajax start
$.ajax({
url: '/stu/stuDelete', //์์ฒญ๊ฒฝ๋ก
type: 'post',
data: {'stuNum' : stuNum}, //ํ์ํ ๋ฐ์ดํฐ
success: function(result) {
if(result == 1){ //result์๋ ์ญ์ ์ฑ๊ณต ์ return๊ฐ 1์ด ์ ์ฅ๋จ.
alert('ํ์์ด ์ญ์ ๋์์ต๋๋ค.')
//๋ฐฉ๋ฒ1. ์ญ์ ๋ฒํผ(this)๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ๋ชจํ๊ทธ์ธ td์ ๋ถ๋ชจํ๊ทธ tr์ ์ง์
//selectedTag.parentElement.parentElement.remove();
//๋ฐฉ๋ฒ2. ์ ํํ ํ๊ทธ๋ฅผ ๊ฐ์ผ ๋ถ๋ชจํ๊ทธ ์ค ๊ฐ์ฅ ๊ฐ๊น์ด ํ๊ทธ๋ฅผ ์ฐพ์๊ฐ
selectedTag.closest('tr').remove();
}
else {
alert('์๊ธฐ์น ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.')
}
},
error: function() {
alert('์คํจ');
}
});
//ajax end
}
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ผํ๋ชฐ ํ๋ก์ ํธ (2) (0) | 2023.03.24 |
---|---|
์ผํ๋ชฐ ํ๋ก์ ํธ(1) - ์ ๋ฐ์ ์ธ ํ ์ก๊ธฐ (0) | 2023.03.23 |
Ajax 2 (์ต๊ทผ ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ) (0) | 2023.03.22 |
ajax(๋น๋๊ธฐ ํต์ ) (0) | 2023.03.21 |
๊ฒ์ํ ํ๋ก์ ํธ - ๋๊ธ ๋ฑ๋ก ๋ฐ ์กฐํ (0) | 2023.03.20 |