6 Kasım 2014 Perşembe

JSF Page Navigation



          Haliyle web projelerinde birden fazla web sayfamız mevcuttur. Bu sayfalar arasında gezerken tarayıcının adres çubuğunda sayfanın adı yazar. JSF ile yaptığımız projeleri direk çalıştırdığımızda sayfalar arası geçişler sıkıntısız olabilir ama navigasyon işlemini yapmamışsak eğer projemizde bulunan sayfa isimleri adres çubuğunda gözükmeyecektir.
            Bu yazımızın konusu bunun nasıl yapıldığı üzerine olacak. Öncelikle bunu bir XML konfigrasyon dosyası ile yapıyoruz ve mantığını anladıktan sonra yapması çok kolay olacaktır. Bu XML dosyasını oluşturmak için NetBeans'te proje üzerinde sağ tık ile New – Other – Java Server Faces – JSF Faces Configuration şeklinde oluşturuyoruz.  Bu dosyanın içeriği aşağıdaki gibidir.


<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
              xmlns="http://xmlns.jcp.org/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">

</faces-config>

            Bu dosya ile web sayfalarımız arasında geçiş kurallarını tanımlayarak sayfa isimlerimizin adres çubuğunda görünmesini sağlıyoruz. Buraya kuralları eklemek için yine sağtık ile Insert – Navigation Rule , Navigation Case ve Managed Bean seçenekleri kullanıyoruz. Öncelikle Managed Bean seçeneğine değinelim. Burada yönlendirme için kullandığımız Managed Bean leri tanıtıyoruz. Bean name , class ve scope bilgileri burada belirtiliyor.

<managed-bean>
        <managed-bean-name>firstBean</managed-bean-name>
        <managed-bean-class>firstBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>
 
            Bir diğer seçenek ise Navigation Rule ' dur. Bu her sayfa için bir tane olabilir ve içerisinde Navigation Case ler eklenerek yönlendirme sağlanır. Bir Rule içerisinde birden fazla Case olabilir. Her bir Case bir duruma karşılık gelir. Örneğin butonlara basılınca farklı sayfalara yönlendirildiği için her butona has bir Case olmalıdır. Bir Navigation Case eklerken direk yönlendirileceği sayfa adını veya Bean üzerindeki yönlendirme işlemini yapan fonksiyonu tanıtarak yönlendirmeyi sağlamış oluyoruz. Burada Bean kullanmanın asıl amacıda budur. Bir kritere göre if bloğu ile farklı sayfalara yönlendirmek istediğimizde fonksiyon adını yazarak gerekli yönlendirmeyi yapıyoruz. Aşağıda 3 sayfa ve her üç sayfada birer buton olacak şekilde bir uygulama yaptım ve bunun faces-config.xml dosyası aşağıda bulunmaktadır. Bu uygulamayı videoyada kaydettim en alttan bu videoya da bakarak bu yazıda anlatılanların nasıl yapıldığını görebilirsiniz. İlk iki buton direk yönlendirme 3. buton işe Bean üzerinden yönlendirme yapıyor.

          Buradaki diğer bir önemli hususta "redirect" tir. Bunu yönlendirme de kullanıp sonradan da web filter kodu yazarsak mantık hatası oluşur. Bu yüzden yönlendirme içerisinde kullanırken dikkatli olmamız gerekiyor

<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
              xmlns="http://xmlns.jcp.org/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
    <managed-bean>
        <managed-bean-name>firstBean</managed-bean-name>
        <managed-bean-class>firstBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <navigation-rule>
        <from-view-id>/page1.xhtml</from-view-id>
        <navigation-case>
            <from-action>page2</from-action>
            <to-view-id>/page2.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <from-view-id>/page2.xhtml</from-view-id>
        <navigation-case>
            <from-action>page3</from-action>
            <to-view-id>/page3.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <from-view-id>/page3.xhtml</from-view-id>
        <navigation-case>
            <from-action>#{firstBean.page()}</from-action>
            <to-view-id>/page1.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
</faces-config>
 





0 yorum:

Yorum Gönder