Yazılım projelerinde kullanıcı arayüzlerini geliştirmek için birçok template teknolojisi kullanılmaktadır. Tiles’ da bunlardan bir tanesidir. Bu yazımda sizlere struts 2 ve tiles entegrasyonundan bahsetmeye çalışacağım. Fazla uzatmadan örneğimizi yapmaya başlayalım. Öncelikle aşağıdaki jar dosyaları WEB-INF/lib dizini altında yer almalıdır.
tiles-api-2.0.5.jar tiles-core-2.0.5.jar tiles-jsp-2.0.5.jar struts2-config-browser-plugin-2.1.2.jar struts2-core-2.1.2.jar struts2-tiles-plugin-2.1.2.jar
Daha sonra WEB-INF dizini altında yer alan web.xml dosyamızı açıyoruz. Tiles kullanabilmemiz için web.xml dosyasına aşağıdaki kodları ekleyin.
<servlet> <servlet-name>tiles</servlet-name> <servlet-class> org.apache.tiles.web.startup.TilesServlet </servlet-class> <init-param> <param-name> org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG </param-name> <param-value> /WEB-INF/tiles-defs.xml </param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <filter> <filter-name>Tiles_Filter</filter-name> <filter-class> org.apache.tiles.web.startup.TilesFilter </filter-class> <init-param> <param-name> org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG </param-name> <param-value> /WEB-INF/tiles-defs.xml </param-value> </init-param> </filter> <filter-mapping> <filter-name>Tiles_Filter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping>
Şimdi de layout umuzu oluşturabiliriz. Layout’umuzu ben 3 parça halinde oluşturuyorum siz istediğiniz gibi şekillendirebilirsiniz. Benim bu 3 parçam header,footer ve content den oluşmaktadır. Layout dosyamızın ismi default.jsp olsun. Bu dosyayı da WebContent altında layouts diye bir dizin daha yaratıp burada oluşturalım.
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title><tiles:getAsString name="title" /></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Language" content="tr" /> </head> <body leftmargin="0" rightmargin="0" topmargin="0"> <div id="header"><tiles:insertAttribute name="header" /></div> <div id="content"><tiles:insertAttribute name="content" /></div> <div id="footer"><tiles:insertAttribute name="footer" /></div> </body> </html>
Yukarıda bold ile belirgin hale getirdiğim kodlar benim tiles-defs.xml dosyamda tanımlayacağım değerleri göstermektedir. Artık elimizde basit bir layout yapımız bulunuyor. Şimdide bu 3 parçanın jsp dosyalarını oluşturalım ve daha sonra tiles-defs.xml dosyasında tanımlamalarımızı yapalım.
WebContent dizini altında tiles isimli yeni bir dizin oluşturalım. Daha sonra content.jsp, footer.jsp ve header.jsp dosyalarını bu dizinde oluşturalım. content.jsp içerisini boş bırakalım. Çünkü burası bizim değişken layout parçamız. Programı ilk çağırdığımızda content de Login ekranı çıkacak daha sonra giriş yaptığımızda ise hoşgeldin mesajı yazan sayfamız gelecek. footer.jsp ve header.jsp dosyalarımızı ise istediğiniz gibi html tag larını kullanarak şekillendirebilirsiniz.
Benim header.jsp dosyamın içeriği aşağıdaki gibi;
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<table width="100%" height="140">
<tr>
<td>
<h1>Gökhan SABIR</h1>
</td>
</tr>
</table>
footer.jsp dosyamın içeriği ise
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <p align="center"> <a href="http://www.gokhansabir.net"> www.gokhansabir.net</a> </p>
Artık tiles-defs.xml dosyamızı oluşturup, tiles definitions larımızı yapabiliriz. web.xml dosyamızda tiles-defs.xml dosyasının dizinini WEB-INF/tiles-defs.xml olarak belirtmiştik. tiles-defs.xml dosyamızın içeriğide aşağıdaki gibi olmalıdır.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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>
<!--
title,header,content ve footer için tiles definitions larımızı
yapıyoruz
-->
<definition name="gokhansabir.template.default"
template="/layouts/default.jsp">
<put-attribute name="title" value="Tiles tutorial homepage" />
<put-attribute name="header" value="/tiles/header.jsp" />
<put-attribute name="content" value="/tiles/content.jsp" />
<put-attribute name="footer" value="/tiles/footer.jsp" />
</definition>
<!--
daha sonra yukarıda default olarak tanımladığımız definition dan
extend ederek Login.jsp yi ve bu sayfada olmasını istediğimiz title
ımızıda tanımlıyoruz
-->
<definition name="gokhansabir.Login" extends="gokhansabir.template.default">
<put-attribute name="title" value="Welcome" />
<put-attribute name="content" value="/jsp/login/Login.jsp" />
</definition>
<!--
daha sonra yine default definition ımızdan doLogin action ımız
çalıştığında, gelecek sayfamızın yolunu tanımlıyoruz.
-->
<definition name="gokhansabir.doLogin"
extends="gokhansabir.template.default">
<put-attribute name="title" value="Welcome" />
<put-attribute name="content" value="/jsp/login/Login.jsp" />
</definition>
<!--
daha sonra yine default definition ımızdan doLogin action ımız
çalıştıktan sonra gelecek olan default sayfamızın tanımını yapıyoruz.
-->
<definition name="gokhansabir.Default"
extends="gokhansabir.template.default">
<put-attribute name="title" value="Welcome" />
<put-attribute name="content" value="/jsp/default.jsp" />
</definition>
</tiles-definitions>
Artık tanımlamalarımızda bittiğine göre bu tanımlarımızı struts.xml dosyamızda kullanabiliriz.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="LoginForm" namespace="/" extends="struts-default">
<result-types>
<result-type name="tiles"
class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<action name="Login_*" class="net.gokhansabir.login.Login"
method="{1}">
<result name="input" type="tiles">gokhansabir.{1}
</result>
<result name="SUCCESS" type="tiles">
gokhansabir.Login
</result>
<result name="LOGGEDIN" type="tiles">
gokhansabir.Default
</result>
<result name="ERROR" type="tiles">gokhansabir.Login
</result>
</action>
</package>
</struts>
Yukarıdaki kodaa belirgin olması için koyu renkle belirttiğim yerler dikkat edmeniz gerekn yerlerdir. struts.xml de tiles kullanımı için result-type kodunu eklemeliyiz. Daha sonra, tiles-defs.xml dosyasında yaptığımız tanımlamaların result type larını tiles olarak düzenlemeliyiz.
Bu işlemlerden sonra artık LoginForm projemize tiles ı entegre etmiş bulunuyoruz. Örneği İndir



Selam Gökhan, bende Struts 2 ile bir proje yapiyorum almanyada. Bir sey ararken rastladim sitene. Kolay gelsin.
Merhaba
Bu çok işime yarıcak biliyorum büyük projeler de bu tur şeyler olmassa olmaz gibi birşey bir hata ile karşılaşıyorum login.class la ilgili olabileceğini düşünere yazdım yarımcı olursanız sevinirim
teşekkürler
HTTP Status 404 - /LoginForm/Login_showLogin.action
type Status report
message /LoginForm/Login_showLogin.action
description The requested resource (/LoginForm/Login_showLogin.action) is not available.
Projeyi olduğu gibi indirip mi deniyorsunuz yoksa siz kendinizmi kodladınız? Eğer direk indirip eclipse e import ettiyseniz, proje adını kontrol edin LoginForm olmak zorunda.
Eğer kendiniz yazıyorsanız, struts.xml inizde bir problem vardır. tam exception ı mail atarsanız bana bakarım.