JavaServer Faces (JSF) Sunucu Yazılım Teknolojileri 2008
JSF Nedir? Yeni nesil Web uygulama anaçatısıdır. Bileşen modeline dayanır: UI Bileşenleri Olay tabanlı etkileşim modeli Geliştiriciler tarafından doğrudan kullanılmak yerine araçlara dayanmaktadır: Örnek: NetBeans Visual Web Pack (VWP) JSP sayfalarını elle yazarak JSF uygulaması geliştirmek de mümkündür
Neden JSF? Web uygulaması geliştirmede Daha yüksek seviyeli soyutlama Olay güdümlü programlama modeli (HTTP'nin istek/yanıt programlama modeline karşıt olarak) MVC tasarım deseni Genişletilebilir bileşen ve rendering mimarisi İstemci aygıt bağımsızlığı desteği Standart Geniş çaplı marka ve endüstri desteği
Neden JSF? Davranış ve görüntüleme arasında iyi bir ayrım sağlar Bileşene özgü olay kotarma UI öğeleri sunucuda durum bilgili (stateful) nesneler halinde Belirli bir görüntüleme (veya dile) sınırlamayan UI bileşenleri ve Web katmanı kavramları JSP de dahil olmak üzere herhangi bir görüntüleme teknolojisiyle çalışır Facelets e olan ilgi artıyor
Neden JSF? JSP ve Servlet JSF içerisinde UI bileşen modeli yok Struts ve JSF birlikte kullanılabilir Struts'ın farkı UI bileşen modeli içermiyor UI bileşenleri için olay modeli içermiyor UI bileşenleri için durum yönetimi içermiyor Birden çok renderer desteği içermiyor (Struts HTML ile daha iç içe)
JSF Nasıl Olmalı Araç dostu İstemci aygıt/protokolunden bağımsız JSP ile kullanılabilir JSP olmadan kullanılabilir HTML kapsamında ve günümüz tarayıcılarında kullanışlı Genişletilebilir Facelets, Seam, vb.
JSF Belirtimi JSF Uygulaması JSF Tags JSF Uyg. JSP (1.2) JSF API Servlets (2.3)
JSF UI Anaçatısıdır Sunucu İstemci istek (olaylar) UI Yanıt (markup)
Masaüstü Tarayıcısı HTML JSF Mimarisi Sunucu JSF Sayfası HTML RenderKit Ön Denetleyici JSF Sayfası Uygulama Telefon WML RenderKit WML
Önemli Basit Yetenekler Genişletilebilir UI component model Esnek rendering modeli Olay kotarma modeli Doğrulama anaçatısı Basit sayfa dolaşım desteği Uluslararasılaştırma Erişim
JSF bileşen ağacı View Form input input combo command
Anahtar JSF Kavramları UIComponent Render bağımsız özellikler Temel sınıfta standart davranışlar Standart UIComponent alt sınıfları: UICommand, UIForm, UIGraphic, UIInput, UIOutput, UIPanel, UISelectBoolean, UISelectMany, UISelectOne FacesEvent İstek ve uygulama olayları için temel sınıf Validator Standart ve uygulama tanımlı doğrulayıcılar için temel sınıf
Anahtar JSF Kavramları Converter String Nesne çevrimi için eklenti FacesContext Servlet istek, yanıt, oturum JSF istek, yanıt ağaçları Model referans ifade değerlendiriciler
Anahtar JSF Kavramları Renderer Bileşenleri belli bir markup diline veya işaret dilini bileşenlere çevirir Bileşenlerdeki render bağımlı özellikleri destekler Birden fazla bileşen tipini destekleyebilir RenderKit Renderer kütüphanesidir Çalışma zamanında genişletilebilir Basit HTML RenderKit'i belirtimin parçasıdır
Application Class Represents a per web application singleton object Maintains application wide objects set of supported locales converters validators Serves as a factory for creating components, converters, and validators public abstract UIComponent createcomponent(string componenttype) throws FacesException
Uygulama Yapılandırma Dosyası Uygulamanın başlamasında gereken kaynakları yapılandırmak için kullanılan XML dosyasıdır Dolaşım kuralları, dönüştürücüler, doğrulayıcılar, render kitleri faces config.xml Tüm tanımlamalar <faces config> etiketi içinde olmalı <faces config>... </faces config>
<?xml version="1.0"?> Örnek: faces config.xml <! Copyright 2003 Sun Microsystems, Inc. All rights reserved. SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. > <!DOCTYPE faces config PUBLIC " //Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN" "http://java.sun.com/dtd/web facesconfig_1_0.dtd"> <faces config> <application> <locale config> <default locale>en</default locale> <supported locale>de</supported locale> <supported locale>fr</supported locale> <supported locale>es</supported locale> </locale config> </application>
Örnek: faces config.xml <navigation rule>... <from view id>/greeting.jsp</from view id>... </navigation rule> <navigation rule>... <from view id>/response.jsp</from view id>... </navigation rule> <managed bean>... <managed bean name>usernumberbean</managed bean name>... <managed bean> </faces config>
Uygulama Yapılandırma Dosyası Birden fazla yapılandırma dosyası olabilir Bu dosyanın uygulama tarafından kullanılabilmesi için üç yol vardır /META INF/faces config.xml isimli bir dosyanın /WEB INF/lib altındaki herhangi bir JAR içerisinde olması Başlangıç parametresi kullanımı : javax.faces.application faces config.xml isimli dosyanın /WEB INF/ dizininde bulunması (en sık kullanılan yöntem)
Application Sınıfı Uygulama başlayınca JSF gerçekleştirimi Application sınıfının tek bir örneğini yaratır. Her uygulama için otomatik olarak yaratılır FacesContext.getApplication()
Backing Beans Sayfada kullanılan UI nesneleriyle ilişkili sunucu taraflı nesnelerdir UI bileşen özellikleri tanımlar Bileşenin değeri veya Bileşen örneği Bileşen ile ilişkili işlemleri gerçekleştiren metotları tanımlar (doğrulama, olay kotarma ve dolaşım işleme de dahil)
Neden Backing Bean ler? Modeli, görünümden ayırmak için (MVC) Model uygulama mantığını ve veriyi yürütmek içindir: Backing Bean ler ve Model nesneleri Görünüm sunumu gerçekleştirir: UI bileşenleri
Backing Bean Kullanımı Sayfayı yazan kişi JSF İfade Dilini (JSF EL) kullanarak bileşen değerini veya örneğini bir Backing Bean özelliğine bağlar: JSF EL "#{...}" biçimindedir Ayrıca JSF EL ile backing bean metotlarını da referans edebilir.
Örnek: greeting.jsp <h:inputtext id="userno" value="#{usernumberbean.usernumber}" validator="#{usernumberbean.validate}"/> userno, UserNumberBean.userNumber backing bean özelliğine bağlanan bileşen değeri
faces config.xml içerisinde UserNumberBean <managed bean> <description> The "backing file" bean that backs up the guessnumber webapp </description> <managed bean name>usernumberbean</managed bean name> <managed bean class>guessnumber.usernumberbean</managed bean class> <managed bean scope>session</managed bean scope> <managed property> <property name>minimum</property name> <property class>int</property class> <value>0</value> </managed property> <managed property> <property name>maximum</property name> <property class>int</property class> <value>10</value> </managed property> </managed bean>
Sayfa Dolaşımı Dolaşım kuralları uygulama yapılandırma dosyasında tanımlanır Dolaşım kuralları kullanıcı bir düğmeye veya bağlantıya bastıktan sonra hangi sayfaya gidileceğini belirler.
Örnek 1 <navigation rule> <description> The decision rule used by the NavigationHandler to determine which view must be displayed after the current view, greeting.jsp is processed. </description> <from view id>/greeting.jsp</from view id> <navigation case> <description> Indicates to the NavigationHandler that the response.jsp view must be displayed if the Action referenced by a UICommand component on the greeting.jsp view returns the outcome "success". </description> <from outcome>success</from outcome> <to view id>/response.jsp</to view id> </navigation case> </navigation rule>
Örnek 2 <navigation rule> <description> The decision rules used by the NavigationHandler to determine which view must be displayed after the current view, response.jsp is processed. </description> <from view id>/response.jsp</from view id> <navigation case> <description> Indicates to the NavigationHandler that the greeting.jsp view must be displayed if the Action referenced by a UICommand component on the response.jsp view returns the outcome "success". </description> <from outcome>success</from outcome> <to view id>/greeting.jsp</to view id> </navigation case> </navigation rule>
Dolaşım Kuralı <navigation rule> (from tree id öğesi ile tanımlanmış) bir sayfadan uygulamanın diğer sayfalarına nasıl gidileceğini belirler Herhangi sayıda <navigation case> öğesi içerebilir <navigation case> Mantıksal çıkarsamaya (from outcome ile tanımlı) dayanarak açık sonraki (to tree id) sayfayı tanımlar
Outcome? Outcome formu gönderen UICommand bileşeninin action özelliğiyle tanımlanır action string veya olay metotu olabilir (#{<BackingBean>.<Method>}) <h:commandbutton id="submit" action="success" label="submit" /> <h:commandbutton action="#{carstore.buycurrentcar}" value="#{bundle.buy}" />
İleri Konular MyFaces Seam Facelets PhaseListener Geliştirici rolleri