타일즈 설정하기
우선 tiles가 무엇인지 알아야한다.
tiles는 우리가 보통 jsp에서
우선 타일즈를 사용하기위해 pom.xml에 tiles를 추가해주어야 한다.
<properties>
<spring.maven.artifact.version>4.1.2.RELEASE</spring.maven.artifact.version>
<egovframework.rte.version>3.6.0</egovframework.rte.version>
<org.apache.tiles-version>2.2.2</org.apache.tiles-version>
</properties>
이처럼 pom.xml에 properties로 tiles 버젼을 추가해준다.
그리고 dependency를 추가해주어야 한다.
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>${org.apache.tiles-version}</version>
<!-- needed to exclude slf4j which causes incompatibilities -->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>${org.apache.tiles-version}</version>
<!-- needed to exclude slf4j which causes incompatibilities -->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>${org.apache.tiles-version}</version>
<!-- needed to exclude slf4j which causes incompatibilities -->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>${org.apache.tiles-version}</version>
<!-- needed to exclude slf4j which causes incompatibilities -->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
조금 길긴하지만 모두 예외처리를 위한 작업이므로 추가해주어야한다.
그리고나서 저장후에 dispatcher-servlet 으로가서 tilesViewResolver와 tilesConfigurer을 추가해주어야 한다.
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
<property name="order" value="1" />
</bean>
<!-- Tiles 2 Configurer -->
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles/default-layout.xml</value>
</list>
</property>
</bean>
위와 같은 빈 두개를 추가해준다. 그 후에 원래있던 urlBasedViewResolver의 순서를 2로 변경해준다.
tiles configure을 보면 타일즈관련 설정은 WEB-INF폴더에 tiles 폴더에있는 default-layout.xml에서 해준다는것을 알 수 있다.
<?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/jsp/egovframework/example/cmmn/default-layouts.jsp">
<put-attribute name="nav" value="/WEB-INF/jsp/egovframework/example/cmmn/default-nav.jsp" />
<put-attribute name="inhead" value="/WEB-INF/jsp/egovframework/example/cmmn/default-inhead.jsp" />
<put-attribute name="left" value="/WEB-INF/jsp/egovframework/example/cmmn/default-left.jsp" />
<put-attribute name="javascript" value="/WEB-INF/jsp/egovframework/example/cmmn/default-javascript.jsp" />
<put-attribute name="notification" value="/WEB-INF/jsp/egovframework/example/cmmn/default-notification_scrolltotop.jsp" />
<put-attribute name="content" value="" />
</definition>
<definition name="*/*.tiles" extends="layouts-tiles">
<put-attribute name="content" value="/WEB-INF/jsp/egovframework/example/{1}/{2}.jsp" />
</definition>
</tiles-definitions>
default-layout.xml 은 대충 이런식으로 생긴것이고 tiles-definitions태그내에 있는게 한덩이의 타일즈이다. 두개의 정의중 처음의 정의가 content부분을 뺀 나머지를 타일즈로 정해준것이고 default-layouts.jsp에 모양이 잡혀있다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<tiles:insertAttribute name="inhead"/>
</head>
<body style="right:0px;">
<!-- header(nav) 부분 -->
<tiles:insertAttribute name="nav"/>
<div class="content">
<tiles:insertAttribute name="left"/> <!-- 왼쪽 사이드바 -->
<tiles:insertAttribute name="content"/> <!-- 컨텐츠(계속바뀜) -->
</div>
<tiles:insertAttribute name="notification"/> <!-- 그 외의기능 -->
</body>
</html>
이런식으로 말이다. default-layout.xml 에 나와있는 javascript는 사용하지 않은상태이다.
내가사용한 부트스트랩이 문제가 많기때문에 자바스크립트를 추가하게되면 콘솔창에 에러난다.
그리고 두번째 정의를 보면 첫번째 정의를 상속받고있는 키워드인 extends가 있다. 거기서 content부분만 오버라이딩 해준것 이다.
이렇게되면 컨트롤러에서
package egovframework.example.main.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MainController {
@RequestMapping(value = "main.do")
public String initMain() throws Exception {
return "main/main.tiles"; // web-inf 안에 jsp파일에 example에 main폴더안에 main.jsp로 간다.
}
}
이것처럼 return main/main.tiles를 붙여주게되면 content부분은 main.jsp의 내용이 들어가게되고 나머지는 /.tiles 의 형태를 띄우고있으니
설정한 tiles가 들어가게 되는것 이다.