1) getAttr로 afterLoginUri가 없는 경우
public String getAfterLoginUri() {
String requestUri = req.getRequestURI();
switch (requestUri) {
case "/usr/member/login":
case "/usr/member/join":
case "/usr/member/findLoginId":
case "/usr/member/findLoginPw":
return Ut.getUriEncoded(Ut.getAttr(paramMap, "afterLoginUri", ""));
}
return getEncodedCurrentUri();
}
/usr/member/login
으로 요청시 파라미터 afterLoginUri의 값이 null
이므로 href="${rq.loginUri}"
) 를 지정할수 없는 문제발생${rq.loginUri}
는 로그인후 이동할 uri를 인코딩한 반환값을 더하고 있으므로Ut.getUriEncoded()
) NullPointException 발생2) Ut.getAttr()
public static String getAttr(Map map, String attrName, String defaultValue) {
if(map.containsKey(attrName)) {
return (String)map.get(attrName);
}
return defaultValue;
}
attrName
키가 존재하지 않는다면3) 로그아웃 후 다시 원래 페이지로 이동
public String getAfterLogoutUri() {
String requestUri = req.getRequestURI();
switch (requestUri) {
case "/usr/article/write":
case "/usr/article/modify":
case "/usr/member/myPage":
return Ut.getUriEncoded("/");
}
return getEncodedCurrentUri();
}
req.getRequestURI()
)가 로그아웃 후 이동 되면 안되는 uri이면 /
로 이동/
이동 시킴1) 리스트 페이지
<c:forEach var="article" items="${articles}">
<tr>
<td>${article.id } </td>
<td>${article.forPrintType1RegDate}</td>
<td><a class="~~생략~~" href="${rq.getArticleDetailUriFromArticleList(article)}">${article.title}</a></td>
<td>${article.extra__writer}</td>
<td>${article.hitCount}</td>
<td>${article.goodReactionPoint}</td>
</tr>
</c:forEach>
href="${rq.getArticleDetailUriFromArticleList(article)}"
: 이동시 현재 리스트페이지의 uri를 함께 보냄2) rq.getArticleDetailUriFromArticleList
public String getArticleDetailUriFromArticleList(Article article) {
return "../article/detail?id="+article.getId()+"&listUri="+getEncodedCurrentUri();
}
3) 상세보기 페이지
<c:if test= "${not empty param.listUri}" >
<a class ="btn-text-link btn btn-active btn-ghost mx-4" href="${param.listUri}">뒤로가기</a>
</c:if>
<c:if test= "${empty param.listUri}" >
<button class ="btn-text-link btn btn-active btn-ghost mx-4" onclick="history.back();">뒤로가기</button>
</c:if>
listUri
)를 쿼리스트링으로 전달했기 때문에 상세보기 페이지에서 이전 리스트 페이지의 주소 알수있다.뒤로가기 버튼 클릭
시 전달 받은 리스트페이지의 주소
로 이동usr/article/detail?id 로 요청시
에는 이전 리스트페이지의 주소의 값을 전달되지 않기 때문에 history.back() 버튼을 노출1) 상세보기 페이지
<c:if test="${reply.extra__actorCanModify }">
<a class="btn btn-ghost" href="../reply/modify?id=${reply.id }&replaceUri=${rq.encodedCurrentUri}">수정</a>
</c:if>
<c:if test="${reply.extra__actorCanDelete }">
<a class="btn btn-ghost" onclick="if(confirm('삭제 하시겠습니까?') == false) return false;"
href="../reply/doDelete?id=${reply.id }&replaceUri=${rq.encodedCurrentUri}">삭제</a>
</c:if>
상세보기 페이지에서 댓글 수정후 원래 상세보기 페이지로 이동하나
listUri
의 정보를 잃게 되므로
뒤로가기 버튼 클릭시 history.back() 동작
댓글 수정후 이동할페이지에 이전 리스트 uri 정보
를 추가
댓글 삭제 후 에도 이전리스트페이지 정보를 가지고있는 uri로 이동하기위해 추가
2) 댓글 수정페이지(listUri를 전달)
<input type="hidden" name="replaceUri" value="${param.replaceUri }" />
이전 리스트 페이지 정보를 가지고있는 uri
(replaceUri)를 doModify에 전달
doModify에서 수정 후 전달받은 replaceUri로 이동
댓글 작성, 삭제시 에도 listUri정보를 전달하여 작성,삭제후에도 listUri정보가 유지된 uri로 이동
href=""
는 현재 접속한 페이지에의 링크와 동일한 의미로 해석