Spring tiles 적용방법

북마크 추가


Maven이 깔려있다는 가정하에

 

1. pom.xml을 열어 tiles dependency 추가한다.

 

<!-- Tiles -->

   <dependency>

       <groupId>org.apache.tiles</groupId>

       <artifactId>tiles-jsp</artifactId>

       <version>${org.apache.tiles.version}</version>

   </dependency>

   <dependency>

       <groupId>org.apache.tiles</groupId>

       <artifactId>tiles-core</artifactId>

       <version>${org.apache.tiles.version}</version>

   </dependency> 


2. servlet-context.xml에 bean을 추가한다.

 

<!-- JsonView configuration -->

<beans:bean id="beanNameResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">

<beans:property name="order" value="0" />

</beans:bean>

 

<!-- Tiles configuration -->

    <beans:bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">

        <beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />

        <beans:property name="order" value="1"/>

    </beans:bean>

 

    <beans:bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">

        <beans:property name="definitions">

            <beans:list>

                 <beans:value>/WEB-INF/tiles/tiles-layout.xml</beans:value>

            </beans:list>

        </beans:property>

    </beans:bean> 

 

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<beans:property name="order" value="2" />

<beans:property name="prefix" value="/WEB-INF/views/" />

<beans:property name="suffix" value=".jsp" />

</beans:bean>

 

*order 순서에 주의

 

3.tiles-layout.xml 파일 생성

- 위에서 설정한 경로/WEB-INF/tiles/ 에 tiles-layout.xml 파일을 만든다.

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE tiles-definitions PUBLIC

       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"

       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">

 

<tiles-definitions>

 <definition name="main" templateExpression="/WEB-INF/template/default/mainTemplate.jsp">

        <put-attribute name="navi" value="/WEB-INF/template/default/navi.jsp" />

        <put-attribute name="body" value="/WEB-INF/views/main.jsp" />

        <put-attribute name="footer" value="/WEB-INF/template/default/footer.jsp" />

 </definition>

    

 <definition name="*" extends="main">

        <put-attribute name="body" expression="/WEB-INF/views/{1}.jsp" />

 </definition>

</tiles-definitions>

 

templateExpression에 설정한 경로에 템플릿으로 사용할 jsp 파일을 만든다. 여기서는 mainTemplate.jsp

 

메인템플릿에 구성할 jsp의 이름은 put-attribute를 통해 설정하고 value에 파일 경로를 작성한다.

<definition name="*" extends="main">

        <put-attribute name="body" expression="/WEB-INF/views/{1}.jsp" />

 </definition> 

이 부분은 메인템플릿을 불러올 때 * 이라는 이름으로 호출되면 body부분의 jsp 파일을

{*.jsp 파일을 넣겠다는 의미

컨트롤러에서 return "deme" 형식으로 리턴하면 /WEB-INF/views/경로 내에서 demo.jsp 파일을 찾아 body 부분에 넣어줌 

*/*로 선언 되어 있으면 "경로/{1}/{2}.jsp" 형식으로 사용가능하다 

 

4.mainTemplate.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>

<html>

<head>

</head>

<body>

<tiles:insertAttribute name="navi" />

<tiles:insertAttribute name="main" />

<tiles:insertAttribute name="footer" />

</body>

<html>

                                                                                                                                         

<tiles:insertAttribute name="" />을 통해 삽입한다.


5.Controller


@RequestMapping(value = "/demo", method = RequestMethod.GET)

public String demo() {

return "demo";

}

 

/demo를 호출한 경우 리턴값인 demo라는 이름을 보내게 되면 tiles 에서는 

지정된  경로의 demo.jsp 파일 찾게 되고 demo.jsp 파일은 메인템플릿의 body 부분에 넣게 된다.

  

 

 

AD
관리자
2014-11-25 14:19
SHARE
댓글

controller -> tiles  -> jsp 순서로 동작하기 위해서 order로 우선순위줌 
관리자

order 순서에 주의하라는데
뭔가용이게
개*****