şuana kadarki yazılarımdaki örnekleri incelediğinizde işlemlerin tamamını tek bir Jsp sayfasında yaptığımı göreceksiniz. Bu yazımda ise bir Jsp sayfası içerisine başka sayfalarında dahil edilmesi işleminden bahsedeceğim. Template oluşturma yapısından bahsediyorum(alttaki görüntü)
Aslında bütün web ve yazılım projelerinde ortak kullanılan alanlar(Header,Footer,Menu) belirlenerek ilgili sayfada çağrılır. Bu şekilde her sayfada aynı kodların yazılmasının önüne geçilmiş olur. Esasında her sayfa için aynı kodları yazarak ta sonuca gidebilirsiniz ancak bakım,tutum ve yeni eklenecek özellikleri de(geliştirme) göz önünde bulundurursak bu yazımda anlatacağım yöntem ilginizi çekecektir diye düşünüyorum. Evet anahtar kelimeyi paylaşıyorum : Apache tiles (Döşeme)
Öncelikle bu yapıyı kullanmak için illede Apache Tiles kullanmak durumunda değilsiniz.
<jsp:include
page="WEB-INF/common/header.jsp" />
|
1- Projemize intelliJ ile bir web projesi oluşturarak başlıyoruz.
2- log4j yi pom.xml'e ekleyin.
<!-- Logging -->
<dependency><groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${org.slf4j-version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${org.slf4j-version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${org.slf4j-version}</version> <scope>runtime</scope> </dependency> |
3- tiles'ı pom.xml e ekleyin
<!-- Tiles -->
<dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-extras</artifactId> <version>${tiles-version}</version> </dependency> |
4- mvc-dispatcher-servlet.xml üzerinden spring/apache-tiles bağlantısını yapın
<!-- Tiles configuration -->
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"> <property name="definitions"> <list> <value>/WEB-INF/tiles/tiles-definitions.xml</value> </list> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" /> </bean> |
5- tiles-definitions.xml dosyasında layout yapısını tasarlıyoruz.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd"> <tiles-definitions> <definition name="singleLayout" template="/WEB-INF/template/singleLayout.jsp" /> <definition name="mainLayout" template="/WEB-INF/template/mainLayout.jsp"> <put-attribute name="header" value="/WEB-INF/template/fragments/header.jsp" /> <put-attribute name="menu" value="/WEB-INF/template/fragments/menu.jsp" /> <put-attribute name="footer" value="/WEB-INF/template/fragments/footer.jsp" /> </definition> </tiles-definitions> |
burada singleLayout ve mainLayout diye iki tanım yaptım. Birinde sade bir sayfa yapısı olacak diğerinde üst menü ve footer bilgileri de gelecek.
Ben bu projede header ve footer alanlarına bootstrap kaynaklarını ekledim. Yavaş yavaş görsel tarafada ağırlık verelim istedim.
Sayfalarda yukarıda tanımladığımız layout-tiles çağrısı yapıldıktan sonra içerik sayfaya özgü olarak girilir.
örnek sayfa içeriği aşağıdaki gibidir:
about.jsp:
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertDefinition name="mainLayout"> <tiles:putAttribute name="body"> <h1>About page !</h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</P> </tiles:putAttribute> </tiles:insertDefinition> |
AboutController.java
package com.company.controller;
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; /** * Created by root on 6/14/15. */ @Controller public class AboutController { private static final Logger logger = LoggerFactory.getLogger(AboutController.class); @RequestMapping(value = "/about", method = RequestMethod.GET) public ModelAndView about(){ ModelAndView mv = new ModelAndView("about"); return mv; } } |
NOT: log4j kütüphanesi apache tiles ın gereksinimlerinden biridir. projenize log4j yi dahil etmeniz gerekmektedir.
NOT2: Tiles versiyonları önemlidir. Burada ben tiles3 kullandım. Diğer versiyonlarda ki ufak tefek farklılıklar başlangıç aşamasında kafanızı karıştırabilir. ilk aşamada benimle aynı spring versiyonunu ve apache-tiles versiyonunu kullanmanızı tavsiye ediyorum
kaynak dosyalar(github) : indirmek için tıklayın
merhaba. anlatım için teşekkürler. ancak ben her şeyi uygulamama rağmen 404 hatası alıyorum. galiba controller class a istek hiç düşmüyor. Daha önce böyle bir hata ile karşılaştınız mı veya aklınıza gelen bir çözüm var mı?
YanıtlaSilmerhaba, kodunuzda aşağıdaki kısımları kontrol eder misiniz ?
YanıtlaSilprojede urlBasedViewResolver resolver tanımlı mı? evetse içinde Tiles tanımlaması da yapılmış mı ? (mvc-dispatcher-servlet.xml dsoyasından bahsediyorum).
Spring ve Tiles versiyonları üstte paylaştığım projede ki gibimi?
Bu kontrolleri yaptıktan sonra bir sonuca varamazsanız projeinizin loglarını yada yazdığınız kaynak kodu(özel değilse) paylaşın akşam inceleyip yardımcı olmaya çalışayım.
Bu yorum yazar tarafından silindi.
SilSon olarak daha fazla yorumları doldurmadan Tiles dışında piyasada Spring mvc için sizin önerebileceğiniz başka template var mı?
YanıtlaSil