Bu Sayfayı Paylaş:

Bilgi/Açıklama

JSF Hakkında

JSF (Java Server Faces) , web projeleri için kullanılan, JEE'deki bileşen tabanlı (component-based), olay yönelimli (event-driven) ve MVC (Model View Controller - Taslam Görnüm Denetleyici) örüntüsüne uygun geliştirilen bir framework (çatı) standartlarından biridir.
JSF bir standarttır. JSF standartında implement (gerçekleştirim) yapan birden fazla proje olabilir. JSF'nin standart API'si jsf-api.jar'dır. Bu JAR sadece standartları belirtir. Standardın reference implementation (başvuru gerçekleştirimi) arşivi ise jsf-impl.jar'dır. Bu nedenle bir JSF projesi yapabilmek için bu iki JAR, projeye ekli olmalıdır. Maven kullanıyorsanız aşağıdaki ekleyebilirsiniz :
<dependency>
  <groupId>com.sun.faces</groupId>
  <artifactId>jsf-api</artifactId>
  <version>2.2.13</version>
</dependency>
<dependency>
  <groupId>com.sun.faces</groupId>
  <artifactId>jsf-impl</artifactId>
  <version>2.2.13</version>
</dependency>
Ayrıca web.xml'e aşağıdakileri eklemeniz gerekmektedir : 
<servlet>
 <servlet-name>Faces Servlet</servlet-name>
  <servlet-class>
    javax.faces.webapp.FacesServlet
  </servlet-class>
  <load-on-startup>1</load-on-startup
</servlet>
<servlet-mapping>
 <servlet-name>Faces Servlet</servlet-name>
 <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

Burdaki javax.faces.webapp. FacesServlet (Yüzler Sunucuğu), JSF framework'ün çalışmasını sağlayan ana sınıftır. Tüm JSF işlemleri bu sınıf üzerinden yürümektedir. *.jsf ile örneğin hello.jsf şeklinde bir URL çağrıldığı zaman FacesServlet'in devreye gireceği anlamına gelmektedir. Artık Hello World örneğimizi yapabiliriz.

Bilgi/Açıklama

JSF Hello World

Sunucu tarafında temel sınıflar, yani bean (çekirdek) adı verilen public ve boş bir kurucusu olan sınıflar) managed bean (yönetilen çekirdek) haline getirilerek web sayfalarında kullanılabilmektedirler. Bir sınıfın Managed Bean haline gelmesi için sınıfın başına @ManagedBean annotation'unu eklemek yeterlidir. Örnek:
import javax.faces.bean.ManagedBean;
@ManagedBean
public class HelloWorld {
  private String message="Hello World";
  public String getMessage() {
   return message;
  }
  public void setMessage(String message) {
    this.message = message;
  }
}
Yukarıda HelloWorld sınıfı bir managed bean haline getirilmiştir ve JSF tarafından yönetilebilir. HelloWorld sınıfının message (ileti) adında tek bir alanı vardır.
Web sitesi için .xhtml uzantılı bir web sayfası ekleyelim ve HelloWorld Bean'ini kullanalım:
<html>
<head>
<title>Hello JSF</title>
</head>
<body>
  <h1>#{helloWorld.message}</h1>
</body>
</html>
Bu sayfa çalıştırıldığında aşağıdaki gibi görülecektir : Buradaki #{helloWorld.message} ifadesinin anlamı şudur: HelloWorld managed bean'i bul (yok ise nesnesini oluştur) ve getMessage()'ı çağırarak message değişkeninin değerini al. Bu nedenle ekranda Hello World yazısı gözükecektir.

Bilgi/Açıklama

JSF Form - Action

Bir managed bean'den get (edin) yöntemiyle değer alabileceğimiz gibi, set (ata) yöntemiyle bir alanı değiştirebiliriz. Bunun için form kullanılabilir. Formla kullanıcıdan girilen bir değer ile message alanını değiştirebiliriz.
Örnek olarak kullanıcıdan adını alalım ve Hello Ad şeklinde selamlayalım.
Aşağıdaki gibi bir Hello bean'imiz olsun :
import javax.faces.bean.ManagedBean;
import javax.faces.view.ViewScoped;
@ManagedBean
@ViewScoped
public class Hello {
  private String message="";
  private String personName="";
  public String getMessage() {
    return message;
  }
  public void setMessage(String message) {
    this.message = message;
  }
  public String getPersonName() {
    return personName;
  }
  public void setPersonName(String personName) {
    this.personName = personName;
  }
  public void changeMessage(){
    setMessage("Hello "+personName);
  
  }
}

Kullanıcıdan alacağımız değeri personName (kişi adı) alanına atayacağız. Kullanıcı formu doldurup gönderdiğinde changeMessage (iletiyi değiştir) yönteminin çağrılmasını sağlayacağız. Ön yüzden tetiklenen bu tür yöntemlere action (eylem) adı verilir. Buradaki changeMessage() , kullanıcıdan aldığı ad ile message değişkenini set edecek. Bu şekilde mesajımız oluşmuş olacak.

Bu bean için @ViewScoped (Görünüm Kapsamlı) ifadesini kullandık. Bir bean'in yaratıldıktan sonra ne kadar yaşayacağı scope (kapsam) kavramı ile belirlenir. Örneğin ilk örneğimizdeki HelloWorld sınıfı scope belirtilmediği için request scope (istek kapsamı) olarak çalışacaktır. JSF'te request scope bir istek geldiği zaman bean'in yaratılacağı; isteğe cevap dönüldüğü zaman da bean'in yok edileceği anlamına gelmektedir. Yani her request'te bu bean'ler yeniden yaratılır. Biz Hello sınıfını ise View Scope tanımlanmıştır. Yani hello.jsf açık olduğu sürece bean yaşıyacaktır ve değerlerini kaybetmeyecektir. Kullanıcı site üzerinde gezindiği boyunca (session) bir bean'in yaşaması için session scope (oturum kapsamı) kullanılır. Hello sınıfını View Scope yaparak kullanıcının girdiği ismi saklamış olduk.
Web sayfası aşağıdaki gibi olabilir :
<html 
    xmlns="http://www.w3.org/1999/xhtml"    
    xmlns:h="http://java.sun.com/jsf/html">
<head>
  <title>Hello JSF</title>
</head>
<body>
<h:form>
  <h1>
    <h:outputText value="#{hello.message}"/>
  </h1>
 Adınız : 
 <h:inputText value="#{hello.personName}"/>
 <br/><br/>
 <h:commandButton 
   action="#{hello.changeMessage}"
   value="Selamla"/>
</h:form>
</body>
</html>
JSF, HTML elementlerinin karşılığı olacak şekilde elementler sağlamaktadır. Bunları kullanmak için
xmlns:h="http://java.sun.com/jsf/html"
ifadesi eklenmiştir.
Sayfadaki h:outputText (çıktı yazısı) bir metin, h:inputText (girdi yazısı) bir yazı alanı, h:commandButton (buyruk düğmesi) ise submit düğmesine karşılık gelen JSF bileşenleridir. Formdaki h:commandButton'un action (eylem) özelliği ise HTML formlarındaki submit işlemine karşılık gelir.
action="#{hello.changeMessage}"
Yukarıdaki sayfa çalıştırılınca Selamla şeklinde düğmeye basıldığında Hello sınıfındaki changeMessage() yöntemi çağrılmış olacaktır. Çağrılma işlemi bittikten sonra sayfa yeniden yüklenecektir. Sayfa yeniden yüklenirken message değeri değişmiş olacağında Hello Ad şeklinde mesaj görüntülenecektir.
Ekran çıktısı: şeklindedir.



Bu Sayfayı Paylaş:

İletişim/Bize Yazın   mh@fibiler.com   Google+   Facebook   Twitter   fibiler@googlegroups.com
Her Hakkı Saklıdır
Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir.
Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir