Merhaba arkadaşlar. Bu yazımızda Kaynak Demetleri konusunu irdeleyeceğiz sizlerle.

Kaynak Demeti nedir Ve Ne İçin Kullanılır?

Kaynak demeti projelerimizde özel-yerel nesneleri tutmak için kullandığımız yapıdır. Biz bazı durumlarda kullanıcıya vermek istediğimiz mesajları daha fazla kod yazmak yerine properties uzantılı dosyalarla kaynak demeti içinde de verebiliriz ve bu kod yazmak yerine daha çok önerilen durumdur. Kaynak demetleri sizin projenizi uluslararası hale getirmenizi sağlayan da yapıdır.

Nasıl Kullanırız?

Kaynak demetlerinin nasıl kullanıldığını bir örnek uygulama üzerinden anlatalım. NetBeans’de JSFDersleri6 adında bir proje açalım. Projeyi açtıktan sonra “Source Packages” kısmına sağ tıklayıp “New” diyelim. New sekmesinin üstüne gelince açılan böülümden en alttaki “Other” bölümüne tıklayalım. Şimdi karşımıza gelen ekrandan yine en alttaki “Other” bölümüne tıklayalım. Sağ kısımdan “Properties Files” öğesini seçelim. “Next” diyelim.

Bir sonraki ekranda bizden isim girilmesini istiyor. Biz de dosyamızın ismini messages koyuyoruz ve Finish diyoruz. Properties dosyamızı ekledikten sonra bunu projemize tanıtmamız gerekiyor. Bunun için bir faces-config.xml dosyasını projemize ekliyoruz ve içine şu kodu yazıyoruz:

<application>
      <resource-bundle>
            <base-name>messages</base-name>
            <var>msg</var>
       </resource-bundle>
</application>

Properties dosyamızı tanıtmak için <application>…</application> etiketleri arasına yazacağız. <resource-bundle>…</resource-bundle> ise bir kaynak demeti tanıtmamızı sağlayan etikettir. Bo kodda <base-name>…</base-name> etiketlerinin arasına yazılan yazı properties dosyamıza verdiğimiz isimdir. <var>…</var> etiketlerinin arasına yazdığımız yazı ise properties dosyamızı çağırırken kullanacağımız addır. Bunu bir nevi kod adı olarak düşünebiliriz. Şimdi messages.properties dosyamıza sağ tıklayalım ve düzenle diyelim. Dosyamız açıldıktan sonra içine şu kodları yazalım.

messages = "messages.properties dosyasının içindeki mesaj"

messages.programmingLanguage = "Java"
messages.author1 = "Akın Kaldıroğlu"
messages.author2 = "<h2>Rahman Usta</h2>"

messages.authorParam = "Yazar İsmi:" {0}
messages.TwoAuthorParam = "Yazar İsimleri:" {0},{1}

Bu Kodların Açıklaması:

Properties dosyamızın içine yazdığımız bu kodardaki her bir “message” ve “message.” ifadesi bizim birer değişkenimizdir. Biz projemizde ihtiyaç duydukça mesajları buradan çekip kullanıcıya söyleyebiliriz.  message.author2 nesnesinin içinde 2 adet html etiketi vardır. Bu html etiketleri xhtml sayfası içerisinde bir kod sayesinde yorumlanabilir veya yorumlanmadan direk ekrana basılabilir.Bunu biraz sonra index.xhtml kodu içerisinde göreceğiz. message.authorParam ve message.TwoAuthorParam nesnelerinde ise {0} ve {1} ifadelerini görmektesiniz. Bu ifade size xhtml sayfasından gönderilen bir yazının message.authorParam ve message.TwoAuthorParam nesnelerine eklenmesine imkan verir.

index.xhtml Kodu

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	  xmlns:h="http://xmlns.jcp.org/jsf/html"
	  xmlns:f="http://xmlns.jcp.org/jsf/core">
	<h:head>
		<title>Managed Bean Kullanımı</title>
	</h:head>
	<h:body>
		<h:form>
			<h:panelGrid columns="1">
				<h:outputText value="#{msg.messages}"/>
				<h:outputText value="#{msg['messages.author1']}"/>
				<h:outputText value="#{msg['messages.author2']}" escape="false"/>
			
				<h:outputFormat value="#{msg['messages.authorParam']}">
					<f:param value="Hüseyin Akdoğan"/>
				</h:outputFormat>
			
				<h:outputFormat value="#{msg['messages.TwoAuthorParam']}">
					<f:param value="Altuğ Bilgin Altıntaş"/>
					<f:param value="Alican Akkuş"/>
				</h:outputFormat>
			</h:panelGrid>
		</h:form>
	</h:body>
</html>

index.xhtml Kodunun Açıklaması:

Kodumuzda daha önce form bileşenlerinde anattığımız bir element olan outputText ve o yazıda değinmediğimiz outputFormat ve param elementleri bulunmakta. OutputFormat elementi temelde OutputText  elementi gibi çalışan fakat parametre geçirme ve işlemi kısmında daha donanımlı bir elementtir. Normalde biz managed bean sınıfımıza, aldığımız değişkenleri gönderebiliyorduk. Fakat bu projede bir yönetmli fasulye sınıfı yok. İşte burada aldığımız değeri param vasıtası ile istediğimiz yere gönderiyoruz. 1. outputText ifadesinde messages.properties dosyamız içindeki messages ifadesini çekiyoruz. msg ifadesine dikkat edelim. 2. outputText ifadesinde properties dosyası içindeki messages.author1 ifadesini çekiyoruz. 3. outputText’te escape ifadesinden kaynaklanan bir özellik mevcut. Escape bir cümlenin içinde bulunan html etiketlerinin yorumlanıp yorumlanmayacağı kararını veren elementtir. Eğer false değer atanırsa html etiketleri tarayıcıda yorumlanır, true atanırsa html etiketleri render edilmez ve olduğu gibi yazılır.

OutputFormat ifadeleri ise yukarıda da bahsettiğimiz gibi parametre geçişi için bize imkan sağlayan elementlerdir. 1. outputFormat ile properties dosyası içindeki messages.authorParam ifadesindeki {0} yerine Hüseyin Akdoğan değerini atıyoruz. 2.ouputFormat ile dosya içindeki messages.TwoAuthorParam ifadesindeki {0} ve {1} yerine Altuğ Bilgin Altıntaş ve Alican Akkuş değerlerini atıyoruz.

Şimdi bir de ekran çıktımıza bakalım.

Bu yazımızda temel olarak bir kaynak demeti nasıl kullanılır onu öğrenmiş olduk. Bir sonraki yazımızda JSF Etiket Kütüphanesi konusunu işleyeceğiz. Hoşçakalın.

Yazıyı yazarken kullandığım kaynak:http://www.mkyong.com/jsf2/jsf-2-0-and-resource-bundles-example/