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
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