JSF

JSF Dersleri-JSF’De Kaynak Demetleri(Resources Bundle in JSF)

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.

Screen Shot 2015-10-02 at 15.41.55

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.

Screen Shot 2015-10-02 at 16.26.49

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/

5 Yorum

  • […] 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. Okumaya devam et… […]

  • iyi günler. Derslerinizin anlatımı güzel. Derslerde hangi sıraya göre gidileceği anlaşılmıyor. Daha güzel bir liste yapılabilir.

  • Merhabalar, faces-config kendımız otomatık oluşturabılıyorumuyuz acaba ? New add tarzı yolu var mı acaba ?

    • Merhabalar.
      NetBeans ortamında sağ klik -> new -> Other deyin. Sol kısımdan Java Server Faces seçin. Sağ kısımda JSF Faces Configuration göreceksiniz. Onu seçip devam edince faces-config.xml eklenecek projenize.
      Eclipse ortamında JSF projesi oluşturunca faces-config.xml kendiliğinden geliyor diye biliyorum.
      Kolay gelsin.

  • merhaba. emeğinize sağlık dersleriniz çok faydalı. properties sayfasında tanımladığım değerleri geri alırken türkçe karaketer sıkıntısı yaşadım. çözüm hakkında bir fikriniz var mı acaba

murat için bir yanıt yazın X