.jsp 파일
<c:forEach var="reply" items="${replyList}">
<tr>
<td width="80%">${reply.content }</td>
<td align="center">${reply.user.username}</td>
<td align="center">
<c:if test="${principal.getUsername() eq reply.user.username}">
<form>
<input type="hidden" id="id" value="${post.id}" />
<input type="hidden" id="seq" value="${reply.seq}" />
<button class="btn btn-secondary" id="btn-deleteReply" value ="${reply.seq}" >삭제</button>
</form>
</c:if>
</td>
</tr>
</c:forEach>
Ajax.js 파일
let deleteReply = {
init: function() {
let _this = this;
$("#btn-deleteReply").on("click", function() {
_this.deleteReply();
});
},
deleteReply: function(seq) {
var id = $("#id").val();
var seq = $("#seq").val();
$.ajax({
type: "DELETE",
url: "/reply/"+seq
}).done(function(response) {
alert(response);
location = "/posts/"+id;
});
}
}
deleteReply.init();
<c:forEach>
에서 각각 값을 전달해줄 수 있는데 id는 중복을 허용하지 않기 때문에 첫 번째 버튼에만 값이 할당되었던 것이었다.
- 부트스트랩을 사용하고 있기 때문에 class를 이용해서 값을 전달해줄 수는 없으니 name 속성을 이용해야 할 것 같다. (부트스트랩은 class 속성으로 css 처리를 한다.)
<c:forEach var="reply" items="${replyList}">
<tr>
<td width="80%">${reply.content }</td>
<td align="center">${reply.user.username}</td>
<td align="center">
<c:if test="${principal.getUsername() eq reply.user.username}">
<form>
<input type="hidden" id="id" value="${post.id}" />
<button class="btn btn-secondary" name="btn-deleteReply" value="${reply.seq}">삭제</button>
</form> <!--변경부분-->
</c:if>
</td>
</tr>
</c:forEach>
<c:forEach>
아래에서 큰 힘을 발휘하긴 어려운 것 같다. 모든 값이 같은 값을 가지게 되어 js 파일에서 구분하여 접근하는 것이 어려운 것 같다.Ajax.js파일
let deleteReply = {
init: function() {
let _this = this;
$("button[name=btn-deleteReply]").on("click", function() { //변경부분
_this.deleteReply(this.value); //변경부분
});
},
deleteReply: function(seq) {
var id = $("#id").val(); //화면 변경을 위한 post id
$.ajax({
type: "DELETE",
url: "/reply/"+seq
}).done(function(response) {
alert(response);
location = "/posts/"+id;
});
}
}
deleteReply.init();
this는 button을 의미하며 this.value를 통해 자기 자신의 값을 가져온다.
- id :
var a = $("#ID변수이름").val();
- val(): value값을 의미
- name :
var b = $("button[name=NAME변수이름]")val();
- button 위치에 태그명
var b = $("button[name=NAME변수이름]").eq("0").val();
: 첫 번째 값 가져온다.- class :
var c = $(".CLASS변수이름").val();
var c = $(".CLASS변수이름").eq("1").val();
: 두 번째 값 가져온다.
- name, class 모두 중복이 가능하여 인덱스로 접근 가능
''
(작은 따옴표)도 가능
- 프론트 단(HTML, JS)에 대한 이해가 많이 부족한 것 같다.
<a href="/" class="btn">버튼</a>
를 이용하는 방법도 있을 것 같다. (다만 REST하지는 않은 방법이라 생각했다.)Reference: