session 을 어떻게 끝어 줘야 하나요??
- 작성자 :
- 소*철
- 작성일 :
- 2012-06-04 22:35:36
- 조회수 :
- 2,312
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
게시물을 신규 등록 또는 수정 한후 해당 페이지 이동 하잖아요??
controller 에서는 return "notice/noticeList";
이런 식으로 말이죠.
근데 동록이나 수정 을 한후 에는 해당 URL 이 계속 유지 되는 현상이 나타 납니다.
예을 들자면
초기 게시판 주소가
http://localhost:8080/SHOW/noticeList.do
위에 리스트 화면에서 등록 버튼을 클릭 한후 해당 페이지에 맞게 입력 한후
등록이 성공하면
http://localhost:8080/SHOW/noticeList.do
주소로 다시 return 되면서 등록한 게시물도 보여야 하잖아요.
정상적으로 게시판 리스트 화면으로 돌아오고, 등록 한 게시물도 보이는데요.
url 이 http://localhost:8080/SHOW/noticeList.do 가 아닌
http://localhost:8080/SHOW/noticeInsert.do 로 계속 유지 되버리네요.
그러다가 다시 등록을 시도 하면 에러가 납니다.
등록 하거나 수정 할때는여 status.setComplete(); 이걸 넣어서 항상
섹션 을 끊어 줬는데도 그러네요.
controller 선언은요. @controller 만 선언 했구요. @SessionAttributes
선언은 안해줬거든요. @SessionAttributes 해줄 필요은 없지 않나요?
controller 에서는 return "notice/noticeList";
이런 식으로 말이죠.
근데 동록이나 수정 을 한후 에는 해당 URL 이 계속 유지 되는 현상이 나타 납니다.
예을 들자면
초기 게시판 주소가
http://localhost:8080/SHOW/noticeList.do
위에 리스트 화면에서 등록 버튼을 클릭 한후 해당 페이지에 맞게 입력 한후
등록이 성공하면
http://localhost:8080/SHOW/noticeList.do
주소로 다시 return 되면서 등록한 게시물도 보여야 하잖아요.
정상적으로 게시판 리스트 화면으로 돌아오고, 등록 한 게시물도 보이는데요.
url 이 http://localhost:8080/SHOW/noticeList.do 가 아닌
http://localhost:8080/SHOW/noticeInsert.do 로 계속 유지 되버리네요.
그러다가 다시 등록을 시도 하면 에러가 납니다.
등록 하거나 수정 할때는여 status.setComplete(); 이걸 넣어서 항상
섹션 을 끊어 줬는데도 그러네요.
controller 선언은요. @controller 만 선언 했구요. @SessionAttributes
선언은 안해줬거든요. @SessionAttributes 해줄 필요은 없지 않나요?
A
안녕하세요.. 소형철님..
return으로 list 페이지를 직접 호출하시거나.. "forward:" prefix를 앞에 넣어서 return을 하는 forward의 경우 원래의 주소가 남습니다. (서버 사이드 처리 방식)
이 경우는 우선.. "redirect:" + "list 페이지에 대한 URL"로 return을 하시면.. 클라이언트 처리 방식으로.. client에 list에 대한 URL로 변경됩니다..
(다만, 이 경우 새로운 URL 호출 방식이기 때문에.. request된 parameter들이 남지 않습니다. 필요한 정보가 있으면.. URL 상에 query 방식으로 덮붙이시면 됩니다.)
status.setComplete();를 하셨다고 하는 것은 Double submit 방지 기능으로.. URL은 등록이나 수정 상태로 남아 있지만.. 다시 호출을 하게 되면.. 재처리가 되지 않고.. 오류가 발생하도록 하는 방식입니다.. (다시 호출은 사용자가 명시적으로 동일한 request를 던지는 것으로 다시 호출되면 문제가 있다라는 정보가 표시됩니다. - 브라우저에 따라 다른 메시지 표시)
이 방식은 등록이나 수정요청된 정보가 모델에 담아질 때에.. session에 담아 놓고..
실제 등록이나 수정 처리를 하고 나서.. 세션 정보를 없애주는 방식으로.. 반드시... @SessionAttributes를 선언해 주셔야 합니다..
(이후에 다시 submit 요청이 온 경우 session에 저장된 model이 삭제되었기 때문에 org.springframework.web.HttpSessionRequiredException발생)
그럼.. 즐거운 하루되십시오.
감사합니다.
return으로 list 페이지를 직접 호출하시거나.. "forward:" prefix를 앞에 넣어서 return을 하는 forward의 경우 원래의 주소가 남습니다. (서버 사이드 처리 방식)
이 경우는 우선.. "redirect:" + "list 페이지에 대한 URL"로 return을 하시면.. 클라이언트 처리 방식으로.. client에 list에 대한 URL로 변경됩니다..
(다만, 이 경우 새로운 URL 호출 방식이기 때문에.. request된 parameter들이 남지 않습니다. 필요한 정보가 있으면.. URL 상에 query 방식으로 덮붙이시면 됩니다.)
status.setComplete();를 하셨다고 하는 것은 Double submit 방지 기능으로.. URL은 등록이나 수정 상태로 남아 있지만.. 다시 호출을 하게 되면.. 재처리가 되지 않고.. 오류가 발생하도록 하는 방식입니다.. (다시 호출은 사용자가 명시적으로 동일한 request를 던지는 것으로 다시 호출되면 문제가 있다라는 정보가 표시됩니다. - 브라우저에 따라 다른 메시지 표시)
이 방식은 등록이나 수정요청된 정보가 모델에 담아질 때에.. session에 담아 놓고..
실제 등록이나 수정 처리를 하고 나서.. 세션 정보를 없애주는 방식으로.. 반드시... @SessionAttributes를 선언해 주셔야 합니다..
(이후에 다시 submit 요청이 온 경우 session에 저장된 model이 삭제되었기 때문에 org.springframework.web.HttpSessionRequiredException발생)
그럼.. 즐거운 하루되십시오.
감사합니다.