Aralık 30 2008

Tiles with Struts 2

Etiketler : , , , ,

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

Yorumlar:

"Tiles with Struts 2" » (3) Yorum

Yorum Yazın

Clicky Web Analytics