Tiles integration

Introduction

A free open-sourced templating framework for modern Java applications. It is based on Composite pattern that simplify the development user interface.

Tiles allows authors to define page fragments (tiles) which can be assembled into a complete page at runtime. These fragments, or tiles, can be used as simple includes in order to reduce the duplication of common page elements or embedded within other tiles to develop a series of reusable templates. These templates streamline the development of a consistent look and feel across an entire application

Tiles can be integrated with all most all popular industry frameworks like JSF, Struts and Spring MVC.

Here we are integrating Tiles with Spring MVC.

Configuration

Maven Dependency

<dependency>

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

<artifactId>tiles-api</artifactId>

<version>2.2.1</version>

</dependency>

<dependency>

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

<artifactId>tiles-core</artifactId>

<version>2.2.1</version>

</dependency>

<dependency>

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

<artifactId>tiles-jsp</artifactId>

<version>2.2.1</version>

</dependency>

<dependency>

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

<artifactId>tiles-servlet</artifactId>

<version>2.2.1</version>

</dependency>

<dependency>

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

<artifactId>tiles-template</artifactId>

<version>2.2.1</version>

</dependency>

Bean tag in *-servlet.xml

<!-- Configure Tiles -->

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">

<property name="definitions">

<list>

<value>/WEB-INF/tiles.xml</value>

</list>

</property>

</bean>

<!-- Tiles View resolver will be called in Order 1 after calling InternalResourceViewResolver -->

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

<property name="viewClass">

<value>

org.springframework.web.servlet.view.tiles2.TilesView

</value>

</property>

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

</bean>

<!-- The InternalResourceViewResolver will be defined to resolve the view

names. As per the above defined rule, a logical view named "login" is delegated

to a view implementation located at /WEB-INF/pages/login.jsp . It will be

called in order 2 after tiles View resolver -->

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

<property name="prefix">

<value>/WEB-INF/pages/</value>

</property>

<property name="suffix">

<value>.jsp</value>

</property>

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

</bean>

Create Base layout.jsp and tiles.xml

Create a BaseLayout.JSP will have tiles injection points.

Create tiles.xml that will define injection points for tiles and identifiers for target View.

<definition name="BaseLayout" template="/WEB-INF/pages/BaseLayout.jsp">

<put-attribute name="header" value="/WEB-INF/pages/Header.jsp" />

<put-attribute name="menu" value="/WEB-INF/pages/Menu.jsp" />

<put-attribute name="footer" value="/WEB-INF/pages/Footer.jsp" />

</definition>

<definition name="page.markhseet" extends="BaseLayout">

<put-attribute name="menu" value="/WEB-INF/pages/Menu.jsp"></put-attribute>

<put-attribute name="body" value="/WEB-INF/pages/MarksheetView.jsp" />

</definition>

Create Controller

Create a controller that will return the tile identifier of the View. Here is an example of MarksheetCtl.java class that returns Tiles identifier of the View.

@RequestMapping(method = RequestMethod.GET)

public String display(@ModelAttribute MarksheetForm form,

Model model) {

long id = form.getId();

if (id > 0) {

MarksheetDTO dto = service.get(id);

form.populateForm(dto);

}

return "page.markhseet";

}