[Spring][17]Page Update, Delete[게시글 수정,삭제 구현]
BackEnd/Spring

[Spring][17]Page Update, Delete[게시글 수정,삭제 구현]

목차

- 게시글 수정 구현

- 게시글 삭제 구현

- UX 개선


게시글 수정 구현

 

detail.jsp

 

 

로그인이 되어있을 때만 볼 수 있게 위와 같이 el 표현식을 작성해줍니다.

 

!empty SessionScope.princiapl

principal에 어떤 것들이 담겨있지 않다면 접근이 불가능합니다.

 

바로 로그인을 해야지 principal이 생기며, 이 principalsession에 담겨있습니다.

바로 userEntity의 형태로 말이죠!

아래 사진에 나와있습니다.

 

UserController에 세션에 담기는 모습

 

 

다만 위는 인증만 된 것이므로 , 권한을 아래와 같이 설정해둡니다.

SessionScope를 통해서 세션에 principal이 있고 거기에 id값이 있으면 값이 왼쪽에 담깁니다.

 

postEntity.user.id는 우리가 컨트롤러를 만들어주어 postEntitydetail에 넘겨주게 됩니다.

그리고 넘겨받은 postEntity에는 user값이 담겨있으며, 그 유저의 id를 가져옵니다.

 

 

 

컨트롤러 설정값

 

model에 담는다

 

Postuser객체가 있는 모습

 

Post의 user

 

principaluserEntity가 담겨 있는 모습

 

session에 다시 새롭게 principal로 업데이트

 

인증과 권한이 구현되어있는 모습

 

로그인

 

로그인하고 post목록에서 선택합니다

 

수정, 삭제 버튼이 보인다

 

로그인한 상태에서는 수정과 삭제 버튼이 보이지만

로그인하지 않으면 보이지 않습니다.

 

여기에서는 본인의 글만 수정 및 삭제를 할 수 있습니다.

(즉, 본인이 로그인을 해야지 버튼이 뜬다는 것)

 

수정, 삭제 버튼이 보이지 않는다

 

 


게시글 삭제 구현

 

로그인을 합니다.

그래야만 삭제를 할 수 있습니다.

(인증과 권한)

로그인

 

Post들

 

많은 Post 중에서 로그인한 User가 쓴 Post상세보기를 해서 들어갑니다.

 

 

삭제!

삭제 버튼을 눌러봅니다.

 

DB에서 지워짐

 

HeidiSQL에 들어가 보고 나서 DB에서 지워진 것을 확인할 수 있습니다.

 

구현한 코드

 

구현한 코드가 다른 것에 비해서 간단합니다.

 

그러나 에러가 뜹니다.

어디서 문제가 생겼는지 확인해 봅시다.

 

ERROR

/

*확실하지 않음*

바로 제가 45번째 줄인 delete문만 추가해주고 model에 담아서 주지 않아서 그런 것입니다.

 

400번 에러가 떠서 model을 추가를 해주고 이것에 새로운 것을 담아서 반환해줍니다.

*문제 해결은 되었음*

/

 

수정한? 코드

 

 

권한 체크를 추가해줍니다.

 

권한체크 추가

 

 


UX 개선

 

 

@ResponseBody로 

 

UX 개선을 위해 Script함수를 새로 만들어줍니다.

 

Script 함수

 

사용된 모습

 

하지만 UX 개선을 위해

삭제했을 때 alert가 뜨지 않게 수정해줍니다.

 

최종구현 코드

 

삭제 성공했을 때 alert문이 뜨는 것보다 안 뜨는 것이 더 낫습니다.

 

/*

Tips

location.href 는 script 내장 함수며
이 함수는 데이터를 들고 가지 않습니다.

(위에서는 데이터를 들고 갈 이유가 없기 때문에 location.href을 사용합니다,

그리고 @ResponseBody의 형태로 반환을 해야 하기 때문이기도 합니다.)

 

즉, script문으로 반환을 하려면 @ResponseBody를 써야 한다는 것이죠.


바로, url로 우리가 만들어놓은 것은

redirect을 하지 못한다는 뜻입니다.


스크립트로 처리할 때는 데이터를 못 넘겨주기 때문에
무조건 requestDispatcher로 써서 넘겨주어야 합니다.

 

위에서 back은 history.back을 사용해서 뒤로 가는 것을 의미합니다.

*/