Welcome to Part-4 of the 7-part series where we will go through different aspects for Struts2 Framework with some useful examples. In previous part we went through Struts2 Validation Framework. We saw how easy it is to integrate validation in your struts2 application.
In this part we will discuss about Tiles Framework and its Integration with Struts2. We will add Tiles support to our HelloWorld Struts application that we created in previous parts. I strongly recommend you to go through previous articles and download the source code of our sample application.
The above code configure Tiles listener in web.xml. An input configuration file /WEB-INF/tiles.xml is passed as argument. This file contains the Tiles definition for our web application.
Create a file tiles.xml in WEB-INF folder and copy following code into it.
Here in tiles.xml we have define a template baseLayout. This layout contains attributes such as Header, Title, Body, Menu and Footer. The layout is then extended and new definitions for Welcome page and Customer page is defined. We have override the default layout and changed the content for Body and Title.
Header.jsp
Menu.jsp
Footer.jsp
The struts.xml now defines a new Result type for Tiles. This result type is used in tag for different actions. Also note that we have define a new action customer-form. This is just an empty declaration to redirect user to Customer form page when she clicks Customer link from menu.
Struts 2 Tutorial List
- Part 1: Introduction to Struts 2 Framework
- Part 2: Create Hello World Application in Struts 2
- Part 3: Struts 2 Validation Framework Tutorial with Example
- Part 4: Struts 2 Tiles Plugin Tutorial with Example
- Part 5: Struts 2 Interceptors Tutorial with Example
- Part 6: Struts 2 File Upload and Save Example
- Part 7: Struts 2 Ajax Tutorial with Example
Introduction to Tiles 2
Nowadays, website are generally divided into pieces of reusable template that are being rendered among different web pages. For example a site containing header, footer, menu etc. This items remains same through out the website and give it a common look and feel. It is very difficult to hard code this in each and every webpage and if later a change is needed than all the pages needs to be modified. Hence we use templatization mechanism. We create a common Header, Footer, Menu page and include this in each page. Tiles Plugin allow both templating and componentization. In fact, both mechanisms are similar: you define parts of page (a “Tile”) that you assemble to build another part or a full page. A part can take parameters, allowing dynamic content, and can be seen as a method in JAVA language. Tiles is a templating system used to maintain a consistent look and feel across all the web pages of a web application. It increase the reusability of template and reduce code duplication. A common layout of website is defined in a central configuration file and this layout can be extended across all the webpages of the web application.Our Application Layout
Our goal is to add Header, Footer and Menu to our StrutsHelloWorld application. Following will be the layout of the same.Required JAR files
In order to add Tiles support to our Struts2 application, we will need few jar files. Following is the list of JARs in our example. Add these JARs in WEB-INF/lib folder.Configuring Tiles in web.xml
To configure Tiles, an entry for listener has to be made in web.xml. Open the web.xml from WEB-INF folder and add following code into it.01.
<
listener
>
02.
<
listener-class
>
03.
04.
org.apache.struts2.tiles.StrutsTilesListener
05.
</
listener-class
>
06.
</
listener
>
07.
<
context-param
>
08.
<
param-name
>tilesDefinitions</
param-name
>
09.
<
param-value
>/WEB-INF/tiles.xml</
param-value
>
10.
11.
</
context-param
>
01.
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
02.
03.
<!--DOCTYPE tiles-definitions PUBLIC-->
04.
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
06.
<
tiles-definitions
>
07.
<
definition
name
=
"baseLayout"
template
=
"/BaseLayout.jsp"
>
08.
<
put-attribute
name
=
"title"
value
=
""
/>
09.
10.
<
put-attribute
name
=
"header"
value
=
"/Header.jsp"
/>
11.
<
put-attribute
name
=
"menu"
value
=
"/Menu.jsp"
/>
12.
13.
<
put-attribute
name
=
"body"
value
=
""
/>
14.
<
put-attribute
name
=
"footer"
value
=
"/Footer.jsp"
/>
15.
16.
</
definition
>
17.
<
definition
name
=
"/welcome.tiles"
extends
=
"baseLayout"
>
18.
<
put-attribute
name
=
"title"
value
=
"Welcome"
/>
19.
20.
<
put-attribute
name
=
"body"
value
=
"/Welcome.jsp"
/>
21.
</
definition
>
22.
<
definition
name
=
"/customer.tiles"
extends
=
"baseLayout"
>
23.
24.
<
put-attribute
name
=
"title"
value
=
"Customer Form"
/>
25.
<
put-attribute
name
=
"body"
value
=
"/Customer.jsp"
/>
26.
27.
</
definition
>
28.
<
definition
name
=
"/customer.success.tiles"
extends
=
"baseLayout"
>
29.
<
put-attribute
name
=
"title"
value
=
"Customer Added"
/>
30.
31.
<
put-attribute
name
=
"body"
value
=
"/SuccessCustomer.jsp"
/>
32.
</
definition
>
33.
</
tiles-definitions
>
Creating JSPs
We will define the template for our webapplication in a JSP file called BaseLayout.jsp. This template will contain different segments of web page (Header, Footer, Menu etc). Create 4 new JSP files BaseLayout.jsp, Header.jsp, Menu.jsp and Footer.jsp and copy following content in each of them. BaseLayout.jsp01.
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
02.
<!--DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"-->
03.
05.
<
html
>
06.
<
head
>
07.
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=UTF-8"
>
08.
<
title
><
tiles:insertAttribute
name
=
"title"
ignore
=
"true"
/></
title
>
09.
10.
</
head
>
11.
<
body
>
12.
<
table
border
=
"1"
cellpadding
=
"2"
cellspacing
=
"2"
align
=
"center"
>
13.
<
tr
>
14.
15.
<
td
height
=
"30"
colspan
=
"2"
><
tiles:insertAttribute
name
=
"header"
/>
16.
</
td
>
17.
</
tr
>
18.
19.
<
tr
>
20.
<
td
height
=
"250"
><
tiles:insertAttribute
name
=
"menu"
/></
td
>
21.
<
td
width
=
"350"
><
tiles:insertAttribute
name
=
"body"
/></
td
>
22.
23.
</
tr
>
24.
<
tr
>
25.
<
td
height
=
"30"
colspan
=
"2"
><
tiles:insertAttribute
name
=
"footer"
/>
26.
27.
</
td
>
28.
</
tr
>
29.
</
table
>
30.
</
body
>
31.
</
html
>
1.
<%@ page contentType="text/html; charset=UTF-8"%>
2.
3.
<%@ taglib prefix="s" uri="/struts-tags"%>
4.
<
h2
>Struts2 Example - ViralPatel.net</
h2
>
1.
<%@ page contentType="text/html; charset=UTF-8"%>
2.
3.
<%@ taglib prefix="s" uri="/struts-tags"%>
4.
<
s:a
href
=
"customer-form"
>Customer</
s:a
>
1.
<%@ page contentType="text/html; charset=UTF-8"%>
2.
3.
<%@ taglib prefix="s" uri="/struts-tags"%>
4.
Copyright © ViralPatel.net
Modifications in Struts.xml
In struts.xml we defined result tag which maps a particular action with a JSP page. Now we will modify it and map the result with Tiles. Following will be the content of struts.xml file.01.
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
02.
03.
<!--DOCTYPE struts PUBLIC-->
04.
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
06.
07.
<
struts
>
08.
<
constant
name
=
"struts.enable.DynamicMethodInvocation"
09.
value
=
"false"
/>
10.
11.
<
constant
name
=
"struts.devMode"
value
=
"false"
/>
12.
<
constant
name
=
"struts.custom.i18n.resources"
13.
value
=
"ApplicationResources"
/>
14.
15.
<
package
name
=
"default"
extends
=
"struts-default"
namespace
=
"/"
>
16.
<
result-types
>
17.
<
result-type
name
=
"tiles"
18.
19.
class
=
"org.apache.struts2.views.tiles.TilesResult"
/>
20.
</
result-types
>
21.
<
action
name
=
"login"
22.
class
=
"net.viralpatel.struts2.LoginAction"
>
23.
24.
<
result
name
=
"success"
type
=
"tiles"
>/welcome.tiles</
result
>
25.
<
result
name
=
"error"
>Login.jsp</
result
>
26.
</
action
>
27.
28.
<
action
name
=
"customer"
29.
class
=
"net.viralpatel.struts2.CustomerAction"
>
30.
<
result
name
=
"success"
type
=
"tiles"
>/customer.success.tiles</
result
>
31.
32.
<
result
name
=
"input"
type
=
"tiles"
>/customer.tiles</
result
>
33.
</
action
>
34.
<
action
name
=
"customer-form"
>
35.
<
result
name
=
"success"
type
=
"tiles"
>/customer.tiles</
result
>
36.
37.
</
action
>
38.
</
package
>
39.
</
struts
>
0 comments:
Post a Comment