JSF Sayfa Geçişleri ve Yönlendirmeleri (Page Navigation)

threepages

Bu yazımızda JSF sayfaları arasında nasıl yönlendirme yapabileceğimizi inceleyeceğiz

Dinamik web sayfaları geliştirirken ihtiyaçlar doğrultusunda farklı sayfalara geçiş yapmak gerekir . Örnek verirsek bir alışveriş sitesinde bir ürüne tıkladıktan sonra o ürünün detaylarını gösteren farklı bir web sayfasının açılmasını bekleriz

Alttaki şekilde bir web sayfasının örnek sayfa geçişleri görülmektedir

faces-config_

JSF içerisinde sayfa geçişlerini farklı yöntemler kullanarak yapabiliriz

JSF Sayfası İçerisinde Otomatik Yönlendirme

Bu yöntemde jsf dosyasının içerisinde yönlendireceğimiz web sayfasını belirtiyoruz . Alttaki örnekteki web sayfasında Gönder butonuna bastığımız zaman userDetail.jsp sayfası açılır.

Continue reading JSF Sayfa Geçişleri ve Yönlendirmeleri (Page Navigation)

JSF ManagedProperty

jsf

Bu yazımda son derece faydalı olduğunu düşündüğüm ‘ManagedProperty’  anotasyonunu elimden geldiğince açıklamaya çalışacağım. Kısa bir örnek vererek başlayayım;

Bir sitede kullanıcı girişi olduğunu ve giriş yaparken kullanıcı bilgilerini userBean de tuttuğumuzu varsayalım. Sitenin işleyişine göre bir sayfa içerisinde birden çok Managed Bean kullanmamız mümkün. Kullanıcının girişini onaylayıp anasayfaya yönlendirdik. Anasayfada farklı bir Bean içerisinde kullanıcı bilgilerine göre veritabanından veri çekmemiz gerekiyor. İşte böyle bir durumda bu kullandığımız Bean içerisine userBean deki kullanıcı verilerini diğer Bean içerisine aktarmamız gerekiyor. ‘ManagedProperty’ anotasyonu tam olarak bu işe yarıyor. Kullanımı oldukça kolay. Ama verinin aktarıldığı Managed Beanler için kullandığımız Scope türüne dikkat edelim , aksi taktirde hata almamız muhtemeldir.

Şimdi küçük bir örnekle nasıl yapıldığını görelim. Bu yaptığım örnekte User adında bir POJO var ve bu POJO da kullanıcının adı ve soyadı yer alıyor. Web sayfamda bir inputText , commandButton ve outputLabel var. inputText içerisine aldığım veriyi firstBean içerisinde saklıyorum. Butona bastığımda ise outputLabel içerisine secondBean içerisine aktardığım firstBean deki veriyi getiriyorum. Anlatırken karmaşık gelmiş olabilir ancak aşağıdaki kodları incelediğinizde ne kadar kolay olduğunu görebilirsiniz. Continue reading JSF ManagedProperty

AWS Storage (Depolama) Servisleri Hakkında

aws_depolama

Amazon S3: Amazon’un Object Storage servisidir. Bulut’ta 1byte -5 TB bir dosyayı (key, value) şeklinde saklamanızı ve sonrada bunu çekebilmenizi sağlar.

  • Web Sayfaları için Statik Content burada tutabilirsiniz (HTML, JS, Video, Image)
  • Analiz etmek istediğiniz büyük ölçekli verilerinizi veya dosyalarınızı S3’te tutabilirsiniz
  • Backup veya Arşivlemek iştediğiniz verinizi S3’de tutabilirsiniz.

Amazon Glacier: Amazon’ün Arşiv servisidir. Çok büyük verilerinizi çok ucuza saklamak istiyorsanız. Bu verilere anlık erişim ihtiyacınız yoksa bu servis sizin için oldukça uygun. AWS Glacier erişim için Import/Export servisini kullanmanız veya S3’deki Object’ler üzerinden kural tanımlayarak Object LifeCycle Glacier eklemeniz gerekir.

Amazon EBS: Sanal EC2 makinelerinin hardiskleridir diyebiliriz. Kolayca snapshot alınabilen ESB’ler dosya sistemi ve veritabanı olarak rahatlıkla kullanılabilir. 1 GB-16 TB arasında istediğiniz harddiski oluşturup sisteminize entegre edebilirsiniz.

Amazon EC2 Instance Storage: EBS’den farklı olarak aynı fiziksel makinenin üzerindeki harddiskler’dir. Sürekli değişen buffer, temporary veri ve cahce gibi mekanizmalar için oldukça uygundur.

aws_1 Continue reading AWS Storage (Depolama) Servisleri Hakkında

Java Server Faces Scope Kavramı

Scope’nin kelime anlamı alan,faaliyet alanı demek.  JSF sayfalarımızda ki yapmak istediğimiz işlemlerin her birine bu sayfaların ne amaç taşıdığını ne amaç için hizmet edeceğini söylememiz gerekir. Yapacağımız işe göre JSF sayfalarımıza tanımlamalar yapmamız gerekmektedir. Önceki derste incelediğimiz JSF Yaşam Döngüsü ‘nde (Management Bean) Bean’ların faaliyet alanları ve süreleri scope’ler ile belirlenmektedir.

Bu Scope’lar 6 adettir.

Session Scope

HTTP stateless/durumsuz bir protokoldur. Yani browser/istemci server/sunucu ile baglanti kurar, istekte bulunur(request) cevabi alir(response) ve browser ile server arasinda baglanti kapanir. Yani her baglanti bir request/response icindir.

Session Scope ( @SessionScoped ) Managed Bean’ler , HTTP session boyunca yasayacaktir. Session, ayni client/istemcinin birden fazla istek/request icin devamliligi saglar.

Kullanıcılarımız için Session oluştururuz. Bu Session Scope oturum kapanana kadar işlemlerimizi gerçekleştirebiliriz. Continue reading Java Server Faces Scope Kavramı

Request – 02

Merhaba Arkadaslar,
Bu bolumde request konusuna devam edecegiz. ServletRequest ve HttpServletRequest arabirimlerinde bulunan metotlari incelemeye devam edecegiz

Ornek Uygulama

Bu ornek uygulamamizda yeni bir sinif olusturacagiz bir onceki paketi kullanabiliriz.

Sinifimiz ;
MoreRequestMethod

Deployment descriptor(web.xml) dosyamizda yeni servlet sinifimiz icin tanimlama yaplim.

	<servlet>
		<servlet-name>MoreRequestMethod</servlet-name>
		<servlet-class>_05_Request.MoreRequestMethod</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>MoreRequestMethod</servlet-name>
		<url-pattern>/morerequestmethod</url-pattern>
	</servlet-mapping>

Continue reading Request – 02

JSF Lifecycle (Yaşam Döngüsü)

jsf_lifecycle

Bu bolumde JSF Lifecycle (yasam dongusunu) konusunu inceleyecegiz.

JSF Lifecycle 6 fazdan/phase olusur.

  • Restore View
  • Apply Request Values
  • Process Validations
  • Update Model Values
  • Invoke Application
  • Render Response

Restore View

Restore kelime anlami olarak yenileme/yeniden kurmak anlamina gelmektedir.
Bir JSF sayfasi icin istek/request geldiginde , link ya da button tiklandiginda,  ilk olarak Restore View fazi baslatilir.

Her JSF sayfasi serverde Component Tree olarak veri yapisi seklinde saklanir.

xhtml sayfalarimizda h:form , h:inputText gibi taglar yer almaktadir. Her tag bir tag handler sinifi ile iliskilidir. JSF tag handler siniflari isbirligi icinde calisarak component tree yapisi olusturur. Component Tree bir tur veri yapisidir/ data structure. Bu veri yapisinda JSF sayfamizda yer alan Java objelerimiz yer alir. Ornegin 2 UIInput objemiz ; <h:inputText> ve <h:inputSecret> gibi.

JSF sayfasina ilk istek geldiginde Component Tree olusturulur , daha sonraki istekler icin hali hazirdaki bu Component Tree kullanilir.

Restore View fazinda 2 durum/case vardir ; Continue reading JSF Lifecycle (Yaşam Döngüsü)

JSF Framework Services & Encoding, Decoding

JSF Framework Services

Java Server Faces scope olarak presentation tier ile sinirlidir.
Database persistence , web services ya da diger backend isleri JSF in scope u disindadir.

jsf-overview

MVC (Model View Controller) architecture

JSF view ve modeli birbirine baglar. View componenti bean property ile su sekilde birbirine bagladik ;

<h:inputText value="#{personBean.name}" />

FacesServlet , JSF frameworkunde controller olarak gorev yapmaktadir. Herhangi bir istek , action oldugunda FacesServlet calisacaktir ve hizmet verecektir.

<h:commandButton value="Login" action="welcome" />

Data conversion
Kullanici formdaki input alanlarina text(String) olarak giris yapar. Bununla birlikte business object (model) bu datayi number, date ya da farkli bir tipte bekliyor olabilir. JSF kolaylikla bu data conversion islemini yapabilir.

Validation & error handling
JSF , formdaki input alanlari icin kolaylikla validation/gecerlilik yapmamiza olanak saglar.
Kullanici uygun olmayan bir data girisi yaptiginda uyari/error mesaji gosterebiliriz.

Internationalization
JSF Internationalization problemine cozum sunar. Resource bundlelar ile Internationalization/ulusallastirma/farkli dil destegi ozelligini saglayabiliriz. Bu konuda ornek yapacagiz Continue reading JSF Framework Services & Encoding, Decoding

JSF Managed Bean

jsf_with_facade

Managed Bean dediğimiz kavram aslında Java Class’ları diyebiliriz. Yazılımımızda kullanacağımız Bean’ların belirli bir süresi vardır. Managed Bean’ların yaşam sürelerini sonraki derslerde görecek olduğumuz (Scope Kavramı) Scope’ler yardımı ile sağlanmaktadır. Bean’lerin yönetiminin sağlanması Managed Bean ile olur. Java Server Faces sayfalarımızda kullanacağımız Beanları eklemede de kullanırız.

  • Managed Bean , JSF tarafindan ulasilan/yonetilen/manage Java bean’leridir.
  • JSF 2.0 dan once managed beanler WEB-INF/faces-config.xml dosyasinda tanimlanmak zorundadir. JSF 2.0 ile birlikte Managed beanler @ManagedBean annotation’i kullanilarak yapilabilmektedir.
Managed Bean Tanımlamak
package _01.hellojsf;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
//@ManagedBean(name="person")
@SessionScoped
public class PersonBean {

	private String name;
	private String password;

	public PersonBean(String name, String password) {
		super();
		this.name = name;
		this.password = password;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
}

Continue reading JSF Managed Bean

JSF İle Merhaba Dünya

Java Server Faces Dersleri‘nde daha yeni adım attık ve bir önceki dersimizde Java Server Faces neydi kavramaya çalıştık. Bugün ilk JSF projemizi oluşturacağız ve yapısını incelemeye başlayalım.

IDE olarak Eclipse kullanmaktayım anlatacaklarım bu IDE üzerinden olacağı için farklı IDE’ler de menü ya da yapım şekli farklılık gösterebilir ama JSF sayfalarımızın yapısı kesinlikle aynıdır.

Hello Java Server Faces 

Yeni bir Dynamic Web Project olusturalim , daha sonrasinda projemize sag tiklayip Convert To Maven Project diyerek projemizi Maven projesi olarak donusturelim.

Jsf

pom.xml dosyamiza gerekli dependency tanimlarini ekleyelim ;

<dependencies>
		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-api</artifactId>
			<version>2.2.11</version>
		</dependency>
		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-impl</artifactId>
			<version>2.2.11</version>
		</dependency>
	</dependencies>

pom.xml gerekli jsf api ‘ leri ekliyoruz. Continue reading JSF İle Merhaba Dünya

38 the finalize()

Merhaba Arkadaslar,
Bir onceki yazimizda Java’daki Garbage Collection mekanizmasindan bahsetmistik. Bu yazimda ise bu mekanizma ile iliskili olan ve Object sinifinda bulunan finalize() metodundan bahsedecegim. Object sinifi Java’da sinif hiyerarsisinin tepesinde bulunmaktadir ve tum siniflar Object sinifini kalittigi icin her sinifin ornegi/instance’i bu finalize() metoduna sahip olacaktir.

Object sinifinda finalize metodunu inceledigimizde ;

	protected void finalize() throws Throwable {
	}

seklinde tanimlandigini gorururuz. Ici bos oldugu icin ilgili Sinifta bu metodu override etmemiz gerekir.

  • Garbage Collection mekanizmasi , Garbage Collector(GC) ile Heap’ten ilgili objeyi silmeden once, finalize() metodunu cagirir. Bunun bize ne gibi bir faydasi olabilir, obje silinmeden once yapmamiz gereken bir islem olabilir. Dosya kapatma islemi gibi bir islem olabilir veya silinmek uzere olan (eligible/uygun) objeyi silinmekten kurtarabiliriz (uneligible duruma getirebiliriz)
  • finalize() metodu GC tarafindan sadece bir kez cagrilabilir.
  • Eger GC bir objeyi silmeye karar verdiyse ve finalize() metodu kod icerisinden cagrilmadiysa, GC , finalize() metodunu cagirmayi garanti eder.
  • Hatirlaycagimiz gibi GC her objeyi silmek gibi bir garanti saglamaz. Dolayisiyla finalize() metodu hic calismayabilir.

Continue reading 38 the finalize()