티스토리 뷰

일단 기본적인 Tiles 적용은 되어있다고 가정하고 진행을 하겠습니다. 

tiles 적용법은 https://it-gosu.tistory.com/3 포스팅 참고

 

viewPreparer 적용은 간단합니다.

 

dispatcher-servlet.xml 의  tiles 부분은 다음과 같습니다.

 

저 부분에서 제가 빨간색으로 원을 그려놓은 부분을 참고해 주시면 됩니다.

1
2
3
4
5
6
<!-- ViewPreparer을 위한 bean 등록 -->
<bean id="menuPreparer" class="com.test.MenuPreparer"></bean>
<!-- id : bean을 사용하기 위한 DI  //  class : 패키지명.클래스이름 -->
    
<property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory"></property>
 
 
 
 

preparerFactoryClass :: tiles에 추가적인 기능을 더해주기 위해 선언한 부분이다.

 

preparer는 렌더링 하기 전 거쳐가는 것?? 이라고 한다

쉽게말하면 화면띄우기전 한번 거쳐간다고 생각하시면 될 것 같아요.

 

property를 선언해주고, 저 것을 사용해주기위해 bean(애플리케이션의 핵심을 이루는 객체)을 하나 생성해줍니다. 

 

 

 

다음은 tile.xml 파일입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN" "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
 
<tiles-definitions>
    <!-- 메뉴 탭 타일즈 -->
 
    <definition name="layouts-tiles"         template="/WEB-INF/tiles/tiles-layout.jsp" preparer="menuPreparer" >
        <put-attribute name="header"       value="/WEB-INF/tiles/inc/header.jsp" />
        <put-attribute name="left"                value="/WEB-INF/tiles/inc/left.jsp" />
        <put-attribute name="body"       value=""/>
        <put-attribute name="footer"        value="/WEB-INF/tiles/inc/footer.jsp" />
    </definition>
 
    <definition name="*/*.tiles" extends="layouts-tiles">
        <put-attribute name="body" value="/WEB-INF/jsp/cms/{1}/{2}.jsp" />
    </definition>
 
</tiles-definitions>
 
 
 
 

 

 

 

 

빨간색 네모친부분에 bean으로 등록한 id를 맞게 입력해줍니다.

 

bean등록에 preparer까지 설정했으면 다음으로 MenuPreparer 클래스 파일을 생성해 줍니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.test;
 
 
 
public class MenuPreparer implements ViewPreparer {
 
    @Override
    public void execute(Request request, AttributeContext attributeContext) throws PreparerException {
        System.out.println("Tiles Menu @@@@@@@@@@@@@@@@@@@@@@@@");
        List<String> menuList = new ArrayList<String>();
        menuList.add("홈");
        menuList.add("로그인");
        menuList.add("회원가입");
        attributeContext.putAttribute("menuList"new Attribute(menuList), true);
    }
 
}
 
 

ViewPreparer안에 있는 execute라는 메소드를 상속받아서 사용합니다. 

 

실행 순서는 다음과 같습니다

Controller 진입 > interceptor pre 실행 > controller 실행 > interceptor post실행 > preparer 실행 

 

위와같이 메뉴리스트를 DB에서 가지고 온 후 

1
2
3
4
<tiles:importAttribute name="menuList"/>
<c:forEach var ="menu" items="${menuList}">
    <button>${menu}</button>
</c:forEach>
 
 

header.jsp 파일에서 다음과같이 사용하면  동적인 메뉴를 구성할 수 있습니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함