Back End/etc

[JSP] Apache Tiles

DevPing9_ 2022. 4. 13. 18:35

Apache Tiles

그 중에서도 리액트마냥 컴포넌트 단위로 작성할 수 있게 끔 해주는 라이브러리

 

templates 을 만들고 contents 를 채워가는 방식
상속을 이용하여 html 을 조립하고, 런타임 시 페이지들이 조각되어 만들어진다.

 

Apache Tiles 의 상속

 

1. tiles-definition.xml 의 정의

해당 xml 에 <definition> 으로 사용할 컴포넌트(.jsp)를 정의한다.
<definition> 하위에 <put-attribute> 로 상속시킬 하위 컴포넌트(.jsp)들을 입력한다.

* put-attribute 에 입력한다고 html 에 자동으로 컴포넌트가 추가되는게 아니다.
* 실질적인 호출이 있기 전까지는 html 에 추가되지 않는다.  

 

> [tiles-definition.xml]

<definition name="base-layout"
       	    template="/WEB-INF/views/tiles/template/base-layout.jsp"/>
        <put-attribute name="title" value="Ping9's Blog"/>
        <put-attribute name="body" value=""/>
        <put-attribute name="page-script" value=""/>
</definition>


<definition name="dashboard" extends="base-layout">
        <put-attribute name="title" value="Welcome to My DashBoard!"/>
        <put-attribute name="body" value="/WEB-INF/views/pages/dashboard/main.jsp"/>
        <put-attribute name="page-script" value="/resources/dist/js/dashboard.js"/>
</definition>

<definition name="stylesheet" template="/WEB-INF/views/tiles/component/stylesheet.jsp"/>

 

 

2. 상속받은 컴포넌트의 호출

dashboard 는 base-layout 을 상속 받아 body 에 main.jsp 가 삽입된다.
코드 예시 보는게 가장 빠르다.

 

> [base-layout.jsp]

<head>
    <tiles:importAttribute name="title" />
    <tiles:insertDefinition name="stylesheet" />
    <script type="text/javascript" src="<tiles:getAsString name="page-script"/>"></script>
</head>

<body>

<div>
    <tiles:insertAttribute name="body" />
</div>

</body>

 

> [ViewController.java]

public class ViewController {
 
    @GetMapping("/dashboard")
    public ModelAndView getDashboard(HttpSession session) {
        ModelAndView mav = new ModelAndView("dashboard");
        
        /*
        ...
        business logic here
        ...
        */

        return mav;
    }
    
}

 

 

 

 

 

728x90