JSF - Yönetilen Fasulye

Managed Bean, JSF'ye kayıtlı normal bir Java Bean sınıfıdır. Başka bir deyişle, Managed Beans, JSF çerçevesi tarafından yönetilen bir Java fasulyesidir. Yönetilen fasulye, alıcı ve ayarlayıcı yöntemlerini, iş mantığını ve hatta bir destek çekirdeğini içerir (bir çekirdek, tüm HTML form değerini içerir).

Yönetilen fasulye, UI bileşeni için Model olarak çalışır. Managed Bean'e JSF sayfasından ulaşılabilir.

İçinde JSF 1.2, yönetilen bir fasulye, onu facesconfig.xml gibi JSF yapılandırma dosyasına kaydetmelidir. NeredenJSF 2.0ileride, yönetilen çekirdekler ek açıklamalar kullanılarak kolayca kaydedilebilir. Bu yaklaşım, fasulyeleri ve kaydını tek bir yerde tutar, dolayısıyla yönetimi daha kolay hale gelir.

XML Yapılandırmasını Kullanma

<managed-bean>
   <managed-bean-name>helloWorld</managed-bean-name>
   <managed-bean-class>com.tutorialspoint.test.HelloWorld</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
</managed-bean> 

<managed-bean>
   <managed-bean-name>message</managed-bean-name>
   <managed-bean-class>com.tutorialspoint.test.Message</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

Ek Açıklamayı Kullanma

@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {
   @ManagedProperty(value = "#{message}")
   private Message message;
   ...
}

@ManagedBean Ek Açıklama

@ManagedBeanbir fasulyeyi name özniteliğinde belirtilen adla yönetilen bir fasulye olarak işaretler. Name özniteliği belirtilmezse, yönetilen fasulye adı varsayılan olarak tam nitelikli sınıf adının sınıf adı kısmını alacaktır. Bizim durumumuzda bu merhabaDünya olurdu.

Bir diğer önemli özellik ise eager. Eğer istekli = "true" ise, yönetilen fasulye ilk kez talep edilmeden önce yaratılır, aksi takdirde "tembel" başlatma kullanılır, burada fasulye yalnızca talep edildiğinde oluşturulur.

Kapsam Ek Açıklamaları

Kapsam ek açıklamaları, yönetilen çekirdeğin yerleştirileceği kapsamı belirler. Kapsam belirtilmezse, bean varsayılan olarak kapsam isteğinde bulunacaktır. Her bir kapsam aşağıdaki tabloda kısaca tartışılmaktadır.

S.No Kapsam ve Açıklama
1

@RequestScoped

Bean, HTTP istek-yanıtı yaşadığı sürece yaşar. Bir HTTP isteği üzerine oluşturulur ve HTTP isteği ile ilişkili HTTP yanıtı tamamlandığında yok edilir.

2

@NoneScoped

Bean, tek bir EL değerlendirmesi olduğu sürece yaşar. EL değerlendirmesinden sonra oluşturulur ve EL değerlendirmesinden hemen sonra yok edilir.

3

@ViewScoped

Bean, kullanıcı tarayıcı penceresinde / sekmesinde aynı JSF görünümü ile etkileşimde olduğu sürece yaşar. Bir HTTP isteği üzerine oluşturulur ve kullanıcı farklı bir görünüme geri gönderdikten sonra yok edilir.

4

@SessionScoped

Bean, HTTP oturumu yaşadığı sürece yaşar. Oturumda bu bean'i içeren ilk HTTP isteği üzerine oluşturulur ve HTTP oturumu geçersiz kılındığında yok edilir.

5

@ApplicationScoped

Bean, web uygulaması yaşadığı sürece yaşar. Uygulamadaki bu bean'i içeren ilk HTTP isteği üzerine (veya web uygulaması başlatıldığında ve eager = true özniteliği @ManagedBean'de ayarlandığında) oluşturulur ve web uygulaması kapandığında yok edilir.

6

@CustomScoped

Bean, bu kapsam için oluşturulan özel Haritadaki fasulye girişi yaşadığı sürece yaşar.

@ManagedProperty Ek Açıklama

JSF, basit bir statik Bağımlılık Enjeksiyonu (DI) çerçevesidir. Kullanma@ManagedProperty ek açıklama, bir yönetilen fasulyenin özelliği başka bir yönetilen fasulyeye enjekte edilebilir.

Örnek Uygulama

Yönetilen çekirdekler için yukarıdaki ek açıklamaları test etmek üzere bir test JSF uygulaması oluşturalım.

Adım Açıklama
1 JSF - Uygulama Oluştur bölümünde açıklandığı gibi com.tutorialspoint.test paketi altında helloworld adıyla bir proje oluşturun .
2 HelloWorld.java'yı aşağıda açıklandığı gibi değiştirin . Dosyaların geri kalanını değiştirmeyin.
3 Aşağıda açıklandığı gibi com.tutorialspoint.test paketi altında Message.java oluşturun .
4 İş mantığının gereksinimlere göre çalıştığından emin olmak için uygulamayı derleyin ve çalıştırın.
5 Son olarak, uygulamayı savaş dosyası biçiminde oluşturun ve Apache Tomcat Web sunucusunda konuşlandırın.
6 Son adımda aşağıda açıklandığı gibi uygun URL'yi kullanarak web uygulamanızı başlatın.

HelloWorld.java

package com.tutorialspoint.test;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {
   @ManagedProperty(value = "#{message}")
   private Message messageBean;
   private String message;
   
   public HelloWorld() {
      System.out.println("HelloWorld started!");   
   }
   
   public String getMessage() {
      
      if(messageBean != null) {
         message = messageBean.getMessage();
      }       
      return message;
   }
   
   public void setMessageBean(Message message) {
      this.messageBean = message;
   }
}

Message.java

package com.tutorialspoint.test;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "message", eager = true)
@RequestScoped
public class Message {
   private String message = "Hello World!";
	
   public String getMessage() {
      return message;
   }
   public void setMessage(String message) {
      this.message = message;
   }
}

home.xhtml

<!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">
   <head>
      <title>JSF Tutorial!</title>
   </head>
   
   <body>
      #{helloWorld.message}
   </body>
</html>

Yapılan tüm değişikliklere hazır olduğunuzda, uygulamayı JSF - Create Application bölümünde yaptığımız gibi derleyip çalıştıralım. Başvurunuzla ilgili her şey yolundaysa, bu aşağıdaki sonucu verecektir.