Over a million developers have joined DZone.

How to Reuse Tiles Definitions Using Wildcard

· Java Zone

Discover how powerful static code analysis and ergonomic design make development not only productive but also an enjoyable experience, brought to you in partnership with JetBrains

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)

Learn more about Kotlin, a new programming language designed to solve problems that software developers face every day brought to you in partnership with JetBrains.

Topics:

Published at DZone with permission of Tousif Khan, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

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

{{ parent.tldr }}

{{ parent.urlSource.name }}