Struts2 Tiles with example

Here is an example that shows how to create tiles in Struts2 using the struts2 tiles plugin. First step will be to change deployment descriptor first setup the tiles definition file:

<context-param>

<param-name
   org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG 
</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>

Now Listener Configuration will look like below:

<listener>

<listener-class>
   org.apache.struts2.tiles.StrutsTilesListener
</listener-class>
</listener>

 Now web.xml file should look like as below:

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

   <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Struts2 Tiles Example</display-name>

 
<context-param>
<param-name>
    org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG 
</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>
<listener>
<listener-class>
 org.apache.struts2.tiles.StrutsTilesListener 
</listener-class>
</listener>

 
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter. StrutsPrepareAndExecuteFilter
</filter-class>
</filter>

 
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

Here is the Tiles.xml configuration file data which should be the key item with which absolute resource will be called at location of page layout.

<?xml version=”1.0″ encoding=”UTF-8″ ?>
<!DOCTYPE tiles-definitions PUBLIC
“-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN”
“http://tiles.apache.org/dtds/tiles-config_2_0.dtd”>

<tiles-definitions>

<definition name=”baseLayout” template=”/baseLayout.jsp”>
 <put-attribute name=”title”  value=”Template”/>
 <put-attribute name=”header” value=”/header.jsp”/>
 <put-attribute name=”menu”   value=”/menu.jsp”/>
 <put-attribute name=”body”   value=”/body.jsp”/>
 <put-attribute name=”footer”   value=”/footer.jsp”/>
</definition>

<definition name=”welcome” extends=”baseLayout”>
 <put-attribute name=”title”  value=”Welcome”/>
 <put-attribute name=”body”   value=”/welcome.jsp”/>    
</definition>

<definition name=”friends” extends=”baseLayout”>
 <put-attribute name=”title”  value=”Friends”/>
 <put-attribute name=”body”   value=”/friends.jsp”/>    
</definition>

<definition name=”office” extends=”baseLayout”>
 <put-attribute name=”title”  value=”Office”/>
 <put-attribute name=”body”   value=”/office.jsp”/>    
</definition>

</tiles-definitions>

 baseLayout.jsp as defined in tiles.xml, will look like below.

<%@ 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> 
<title>
<tiles:insertAttribute name="title" ignore="true" />
</title>
</head>
<body>
<table border="1" cellpadding="2" cellspacing="2" align="center">
<tr>
<td height="30" colspan="2">
<tiles:insertAttribute name="header" />
</td>
</tr>
<tr>
<td height="250">
<tiles:insertAttribute name="menu" />
</td>
<td width="350">
<tiles:insertAttribute name="body" />
</td>
</tr>
<tr>
<td height="30" colspan="2">
<tiles:insertAttribute name="footer" />
</td>
</tr>
</table>
</body>
</html>

 In the struts.xml file create a new result type for tiles as shown below.

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
<struts>
<package name="default" extends="struts-default">
<result-types>
<result-type name="tiles" 
 class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<action name="*Link" method="{1}" class="com.vaannila.action.LinkAction">
<result name="welcome" type="tiles">welcome</result>
<result name="friends" type="tiles">friends</result>
<result name="office" type="tiles">office</result>
</action>
</package>
</struts>

Now layout of above example should look like below, which have header, Menu, Body and Footer elements in tiles layout.

I hope you get this blog useful for creating application with Strut2 tiles.