Platinum Partner
java,enterprise-integration,frameworks,tips and tricks

How to Reuse Tiles Definitions Using Wildcard

If you are developing a project in Java/J2EE and using Tiles then you are aware of Tiles definition XML file. Being a templating framework, Tiles used one definition per view to render output. User can extend this definition with a defined template so all the common pages will be rendered by the template but still you need one definition per jsp.

Consider a scenario where you have three user roles (admin, manager, and employee) and for each you have created a separate jsp. With this requirement you might end up with such tiles definitions.

<definition name="user/admin" extends="DefaultTemplate">
  <put-attribute name="body"   value="/views/admin.jsp"/>
</definition>

<definition name="user/manager" extends="DefaultTemplate">
  <put-attribute name="body"   value="/views/manager.jsp"/>
</definition>

<definition name="user/employee" extends="DefaultTemplate">
  <put-attribute name="body"   value="/views/employee.jsp"/>
</definition>

Tiles v2.2 comes with the wildcard character support in definitions name. With the above scenario, we can make these three definitions into one using wildcard.

<definition name="user/*" extends="DefaultTemplate">
  <put-attribute name="body"   value="/views/{1}.jsp"/>
</definition>

Spring configuration xml file

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
	http://www.springframework.org/schema/context  
	http://www.springframework.org/schema/context/spring-context-3.2.xsd 
	http://www.springframework.org/schema/mvc
	http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
	
	<mvc:annotation-driven />
	<mvc:default-servlet-handler />
	<mvc:resources mapping="/resources/**" location="/resources/" />

	<!-- Forwards requests to the "/" resource to the "index" view -->
	<mvc:view-controller path="/" view-name="index" />
  
	<mvc:view-controller path="user/admin" view-name="user/admin" />
	<mvc:view-controller path="user/manager" view-name="user/manager" />
	<mvc:view-controller path="user/employee" view-name="user/employee" />
	
	<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.tiles3.TilesViewResolver"/>
    
	<bean id="tilesConfigurer" 
    class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
		<property name="definitions">
			<list>
				<value>/WEB-INF/layouts/layouts.xml</value>
			</list>
		</property>
	</bean>

</beans>

I have used Spring MVC to integrate Tiles and used Spring view controller to avoid creating java Controller.

Output:



Download Source (size: 60 Kb)


Download WAR (size: 4.61 Mb)

Published at DZone with permission of {{ articles[0].authors[0].realName }}, DZone MVB. (source)

Opinions expressed by DZone contributors are their own.

{{ tag }}, {{tag}},

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}
{{ parent.authors[0].realName || parent.author}}

{{ parent.authors[0].tagline || parent.tagline }}

{{ parent.views }} ViewsClicks
Tweet

{{parent.nComments}}