[문제점]
일반적으로 현재 선택한 메뉴를 표시하기 위해서는 해당 Element(보통 <li>)에 Class 값을 줘서 표시한다.
<ul>
<li class="active"><a href="abc.do">abc</a></li>
<li><a href="123.do">123</a></li>
</ul>
apache tiles를 사용하면 content 영역 뿐만 아니라 top과 left, footer 등 모든 문서를 서버로부터 다시 받아온다.
따라서 클라이언트에서 class를 변경하여도 Reset되어버려 우리가 선택한 메뉴를 표시할 수 없다.
[해결방법]
참고사이트 :
1. Server
tiles 설정에서 선택된 메뉴의 definition에 attribute value 추가하기
<definition name="abc" extends="layout">
<put-attribute name="content" value="/WEB-INF/jsp/abc.jsp" />
<put-attribute name="current" value="abc" cascade="true"/>
</definition>
<definition name="123" extends="layout">
<put-attribute name="content" value="/WEB-INF/jsp/123.jsp" />
<put-attribute name="current" value="123" cascade="true"/>
</definition>
2. jsp
-- tilesx 사용을 위한 정의
<%@ taglib uri="http://tiles.apache.org/tags-tiles-extras" prefix="tilesx" %>
-- 서버에서 정의한 current 값 사용
<tilesx:useAttribute name="current" />
-- el을 이용하여 값 current 값 추출
${current } => abc / 123
-- 메뉴구성
<ul>
<li class="${current == 'abc' ? 'active' : ''}"><a href="abc.do">abc</a></li>
<li class="${current == '123' ? 'active' : ''}"><a href="123.do">123</a></li>
</ul>
최근 덧글