JSF Static Navigation

jsf

JSF 1.2 de tum navigation kurallari faces-config.xml de yapilmasi gerekiyordu. JSF 2.x te bu zorunluluk ortadan kalkti.

Static Navigation

Simdiye kadar orneklerimizde Static Navigation’i kullandik. <h:commandButton> component’inde action attribute olarak gidecegi sayfa bilgisini deger olarak verdik.

<h:commandButton value="Login" action="welcome" />
  • action attribute degeri outcome olarak isimlendirilir yani “welcome” degeri outcome bilgisidir.Eger outcome da dosya bilgisi yoksa mevcut view in dosya bilgisi eklenir. Yani calistirdigimiz sayfa xhtml oldugu icin outcome bilgisi welcome.xhtml olarak degerlendirilir.
  • Outcome / ile baslamiyorsa path olarak current/mevcut view baz alinir.

Outcome bilgisini action attribute’te verebilecegimiz gibi metot da kullanabiliriz.

NavigationBean.java

package _18.static1.navigation;

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

@ManagedBean
@SessionScoped
public class NavigationBean {

	public String goToPage3() {
		return "page3";
	}
}

Continue reading JSF Static Navigation

JSF JSTL , JSTL Functions

JSP Standard Tag Library (JSTL) & JSF

Burada bir kac ornek yapacagiz ve JSTL kodlarimizi xhtml dosyalarinda kullanabildigimizi gorecegiz.

Facelet dosyalari , <c:out> JSTL tagini kullanmamiza izin vermez!

JSP dosyalarimizda JSTL i kullanabilmek icin @taglib directive eklememiz gerekliydi.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

Facelets sayfalarimizda da namespace eklememiz gerekli

xmlns:c="http://java.sun.com/jstl/core"

<c:set> ,<c:if> gibi JSTL taglari icin jar eklememiz gerekmezken c:forEach icin eklememiz gerekmektedir.

pom.xml

	        <dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.1.2</version>
		</dependency>

		<dependency>
			<groupId>taglibs</groupId>
			<artifactId>standard</artifactId>
			<version>1.1.2</version>
		</dependency>

JSTLBean.java

package _17.jstl;

import java.util.HashMap;
import java.util.Map;

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

@ManagedBean(name = "JSTLBean")
@SessionScoped
public class JSTLBean {

	private String property1;
	private Map<String, String> map = new HashMap<String, String>();

        //getters and setters
}

Continue reading JSF JSTL , JSTL Functions

JSF Expression Language

Bu bolumde Expression Language konusuna deginecegiz.

2 tane Expression Language kumesi mevcuttur.

  • JSP Expression Language
  • JSF Expression Language

JSP Expression Language ile JSF Expression Language arasinda farkliliklar mevcuttur. Gramer olarak baktigimizda

  • JSP Expression Language dolar $ karakteri ile baslar ve suslu parantezler ile devam eder/sonlanir.
  • JSF Expression Language diyez # isareti ile baslar ve suslu parantezler ile devam eder/sonlanir.
  • JSP Expression Language , page compilation time da yani sayfa render edildiginde hemen calistirilir.
  • JSF Expression Language , deferred ( ertelenmis / gecikmeli) olarak calisir. JSF lifecycle context ine gore calisacaktir.

Unified Expression Language

Unified Expression Language ozelligi JSF 2.1 ile birlikte gelmistir. JSP Expression Language ve JSF Expression language ‘un bir birlesimi  (union) olarak ortaya koyulmustur.

Expressionlar icin deferred evaluation/degerlendirme
Expressionlar icin read/write modu
JSTL ( JSP Standard Tag Library ) taglarinin deferred olarak calisabilmesi. Continue reading JSF Expression Language

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

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