시작은 언제라도

Tiles framework detail 본문

Web programming/Spring

Tiles framework detail

row_a_boat 2021. 6. 22. 18:50

Spring + tiles 연동 방법

1. 프로젝트 maven 적용 후 pom.xml에서 tiles dependency 추가

 

2. tiles-config.xml 작성

<tiles-definitions>
<!-- HomeController 에서 viewName을 home.tiles 로 줄 예정 -->
	<definition name="home.tiles" template="/WEB-INF/views/templates/layout.jsp">
		<put-attribute name="title" value="kosta"/>
		<put-attribute name="header" value="/WEB-INF/views/templates/header.jsp"/>
		<put-attribute name="left" value="/WEB-INF/views/templates/left.jsp"/>
		<put-attribute name="main" value="/WEB-INF/views/home.jsp"/>
		<put-attribute name="right" value="/WEB-INF/views/templates/right.jsp"/>
		<put-attribute name="footer" value="/WEB-INF/views/templates/footer.jsp"/>
	</definition>
    
	<!-- <definition name="main2.tiles" extends="home.tiles">
		<put-attribute name="main" value="/WEB-INF/views/main2.jsp"/>
	</definition> -->
	<!-- 		
			definition name="*.tiles"
							   * 가 {1} 정보로 할당된다 
							   만약 Controller에서 viewName을 main2.tiles로 주면 
							   main2.jsp가 메인으로 제공된다 
			사례) HomeController 의 메서드 
			      @RequestMapping("main2")
					public String main2() {
						return "main2.tiles";
					}				   
	 -->
     
	<definition name="*.tiles" extends="home.tiles">
		<put-attribute name="title" value="{1}" />
		<put-attribute name="main" value="/WEB-INF/views/{1}.jsp"/>
	</definition>
	<definition name="*/*.tiles" extends="home.tiles">
		<put-attribute name="title" value="{2}" />
		<put-attribute name="main" value="/WEB-INF/views/{1}/{2}.jsp"/>
	</definition>


 </tiles-definitions>   

3. 기본 템플릿으로 사용할 jsp작성

ex) template.jsp

<html>
<head>
<title><tiles:insertAttribute name="title" ignore="true" /></title>
</head>

<body>
	<div id="header">
	<!-- Tiles header 영역 -->
	<tiles:insertAttribute name="header" />
	</div>
	<div class="container-fluid text-center">    
     <div class="row content">
    <div id="left" class="col-sm-3 sidenav" >
    <!-- Tiles left 영역 -->
    <tiles:insertAttribute name="left" />
    </div>
	<div id="main" class="col-sm-7 text-left">
	<!-- Tiles main 영역 -->
	<tiles:insertAttribute name="main" />
	</div>
	<div id="right" class="col-sm-2 sidenav">
	<!-- Tiles right 영역 -->
	<tiles:insertAttribute name="right" />
	</div>
	</div>
	</div>
	<div id="footer">
	<!-- Tiles footer 영역 -->
	<tiles:insertAttribute name="footer" />
	</div>
</body>
</html>

 

tiles-config.xml의 <definition>태그에서 name속성에 작성한 header, footer에 해당하는 value값에 있는경로의
jsp파일이 layout.jsp의 <tiles:insertAttributes>태그의 name속성에 사용되는것이다.
즉, header, body, footer 라는 레이아웃으로 템플릿을 구성한 것이다. 

 

이곳(template.jsp) 에 들어갈 내용을 따로 작성해서 (main.jsp) 적용시킨다.

 

3.tilesConfiguration.java 에서

bean 객체 설정 (SpringBoot)

@Bean     // 소문자로 시작하는 메서드명이 bean id가 된다 

UrlBasedViewResolver tilesViewResolver()

@Bean

TilesConfigurer tilesConfigurer()

 

4. 개별 controller에서 설정 완료

ex)

@Controller
public class MemberController {
	@Resource
	private MemberMapper memberMapper;
	@RequestMapping("findbyid-form")
	public String findbyIdForm() {
		return "member/findbyid-form.tiles";
	}
  }

 

*.tiles로 return 하지 않을시 viewResolver에 의해 .jsp로 return 된다. -> layout 적용안된 페이지가 나타나게 됨

 

 


Tiles framework로 각 화면 jsp파일마다 jstl로 c:include없이 페이지 레이아웃을 담당하는 부분과 각 화면이 담당하는 소스를 확실하게 나누어 코드 양을 줄이고, loose coupling 시킴. 페이지의 레이아웃이 바뀌어도 jsp파일의 include를 수정할 필요가 없어졌다

 

 

 

 

 

'Web programming > Spring' 카테고리의 다른 글

Spring + Tiles Framework 연동  (0) 2021.06.22
MyBatis Framework  (1) 2021.06.19
spring framework 용어 정리  (0) 2021.06.07
Spring Annotation  (0) 2021.06.01
Settings  (0) 2021.06.01