{"id":31577,"date":"2025-10-11T12:42:14","date_gmt":"2025-10-11T09:42:14","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=31577"},"modified":"2025-10-11T12:42:14","modified_gmt":"2025-10-11T09:42:14","slug":"jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/","title":{"rendered":"JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi<\/h2>\n<p>JavaServer Faces (JSF), Java tabanl\u0131 web uygulamalar\u0131 geli\u015ftirmek i\u00e7in standart bir bile\u015fen tabanl\u0131 kullan\u0131c\u0131 aray\u00fcz\u00fc (UI) \u00e7er\u00e7evesidir. Geli\u015ftiricilerin, HTML, CSS ve JavaScript gibi \u00f6n u\u00e7 teknolojilerinin karma\u015f\u0131kl\u0131\u011f\u0131yla do\u011frudan u\u011fra\u015fmadan, g\u00fc\u00e7l\u00fc ve etkile\u015fimli web aray\u00fczleri olu\u015fturmalar\u0131n\u0131 sa\u011flar. Bu rehberde, JSF&#8217;in temellerinden ba\u015flayarak, pratik \u00f6rnekler ve \u00f6nemli ipu\u00e7lar\u0131yla kendi JSF uygulaman\u0131z\u0131 nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m \u00f6\u011freneceksiniz.<\/p>\n<h3>JSF Nedir ve Neden Kullan\u0131l\u0131r?<\/h3>\n<p>JSF, Java EE (\u015fimdiki Jakarta EE) platformunun bir par\u00e7as\u0131 olarak ortaya \u00e7\u0131km\u0131\u015ft\u0131r. Temel amac\u0131, web uygulamalar\u0131n\u0131n kullan\u0131c\u0131 aray\u00fcz\u00fc katman\u0131n\u0131 geli\u015ftirmeyi kolayla\u015ft\u0131rmakt\u0131r. Geleneksel istek-yan\u0131t d\u00f6ng\u00fcs\u00fcne dayal\u0131 web uygulamalar\u0131n\u0131n aksine, JSF bir olay odakl\u0131 ve bile\u015fen tabanl\u0131 model sunar. Bu, masa\u00fcst\u00fc uygulama geli\u015ftirme deneyimine benzer bir yakla\u015f\u0131m sunarak geli\u015ftiricilerin daha verimli olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>JSF kullanman\u0131n ba\u015fl\u0131ca avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Bile\u015fen Tabanl\u0131 Mimari:<\/strong> JSF, yeniden kullan\u0131labilir UI bile\u015fenleri (d\u00fc\u011fmeler, metin kutular\u0131, tablolar vb.) sa\u011flar. Bu, kod tekrar\u0131n\u0131 azalt\u0131r ve geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r.<\/li>\n<li><strong>Olay Odakl\u0131 Geli\u015ftirme:<\/strong> Masa\u00fcst\u00fc uygulamalardaki gibi, kullan\u0131c\u0131 etkile\u015fimleri (d\u00fc\u011fmeye t\u0131klama, metin girme) olaylar olarak ele al\u0131n\u0131r ve sunucu taraf\u0131nda i\u015flenir.<\/li>\n<li><strong>Model-View-Controller (MVC) Deste\u011fi:<\/strong> JSF, i\u015f mant\u0131\u011f\u0131 (Model), kullan\u0131c\u0131 aray\u00fcz\u00fc (View) ve bunlar aras\u0131ndaki etkile\u015fimi y\u00f6neten kontrolc\u00fc (Controller) aras\u0131nda net bir ayr\u0131m sa\u011flar.<\/li>\n<li><strong>G\u00fc\u00e7l\u00fc Ara\u00e7 Deste\u011fi:<\/strong> \u00c7o\u011fu modern IDE (Eclipse, IntelliJ IDEA, NetBeans) JSF i\u00e7in kapsaml\u0131 destek sunar, bu da kod tamamlama, hata ay\u0131klama ve bile\u015fen paletleri gibi \u00f6zelliklerle geli\u015ftirme s\u00fcrecini kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Geni\u015fletilebilirlik:<\/strong> \u00dc\u00e7\u00fcnc\u00fc taraf bile\u015fen k\u00fct\u00fcphaneleri (PrimeFaces, OmniFaces vb.) sayesinde JSF uygulamalar\u0131na kolayca geli\u015fmi\u015f \u00f6zellikler eklenebilir.<\/li>\n<\/ul>\n<p>JSF \u00f6zellikle kurumsal uygulamalar, CRUD (Create, Read, Update, Delete) operasyonlar\u0131n\u0131n yo\u011fun oldu\u011fu i\u015f uygulamalar\u0131 ve veri odakl\u0131 web aray\u00fczleri i\u00e7in tercih edilir. Daha modern ve hafif frontend framework&#8217;leri (React, Angular, Vue.js) ile kar\u015f\u0131la\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, JSF genellikle sunucu taraf\u0131nda daha fazla kontrol isteyen ve Java ekosistemine s\u0131k\u0131ca ba\u011fl\u0131 projelerde \u00f6ne \u00e7\u0131kar.<\/p>\n<h2>JSF Temelleri: Mimari ve Kurulum<\/h2>\n<p>JSF&#8217;i anlamak i\u00e7in mimarisini ve geli\u015ftirme ortam\u0131n\u0131n nas\u0131l kuruldu\u011funu bilmek \u00f6nemlidir.<\/p>\n<h3>JSF Mimarisi ve Ya\u015fam D\u00f6ng\u00fcs\u00fc<\/h3>\n<p>JSF&#8217;in temelinde, her bir UI eleman\u0131n\u0131n (metin alan\u0131, d\u00fc\u011fme, tablo) bir Java nesnesi olarak temsil edildi\u011fi bir bile\u015fen a\u011fac\u0131 bulunur. Bu bile\u015fenler, sunucu taraf\u0131nda olu\u015fturulur ve istemciye (taray\u0131c\u0131ya) HTML olarak render edilir. JSF&#8217;in kalbinde, her iste\u011fi i\u015fleyen ve yan\u0131t\u0131 \u00fcreten bir &#8220;Ya\u015fam D\u00f6ng\u00fcs\u00fc&#8221; (Lifecycle) bulunur. Bu ya\u015fam d\u00f6ng\u00fcs\u00fc a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 i\u00e7erir:<\/p>\n<ol>\n<li><strong>Restore View:<\/strong> Gelen istek i\u00e7in mevcut bile\u015fen a\u011fac\u0131 geri y\u00fcklenir veya yeni bir a\u011fa\u00e7 olu\u015fturulur.<\/li>\n<li><strong>Apply Request Values:<\/strong> \u0130stemciden gelen de\u011ferler (form verileri) bile\u015fenlere uygulan\u0131r.<\/li>\n<li><strong>Process Validations:<\/strong> Bile\u015fenlere uygulanan de\u011ferler do\u011frulan\u0131r. Hata varsa, ya\u015fam d\u00f6ng\u00fcs\u00fc Render Response ad\u0131m\u0131na atlar.<\/li>\n<li><strong>Update Model Values:<\/strong> Do\u011frulanm\u0131\u015f de\u011ferler, arka u\u00e7taki Java nesnelerine (Managed Bean&#8217;lere) ba\u011flan\u0131r.<\/li>\n<li><strong>Invoke Application:<\/strong> Uygulama olaylar\u0131 i\u015flenir (\u00f6rne\u011fin, bir d\u00fc\u011fmeye t\u0131klama olay\u0131).<\/li>\n<li><strong>Render Response:<\/strong> Bile\u015fen a\u011fac\u0131 HTML&#8217;ye d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr ve istemciye g\u00f6nderilir.<\/li>\n<\/ol>\n<p>Bu ya\u015fam d\u00f6ng\u00fcs\u00fc, JSF&#8217;in bile\u015fen tabanl\u0131 ve olay odakl\u0131 yap\u0131s\u0131n\u0131n temelini olu\u015fturur.<\/p>\n<h3>Geli\u015ftirme Ortam\u0131 Kurulumu<\/h3>\n<p>JSF uygulamas\u0131 geli\u015ftirmek i\u00e7in a\u015fa\u011f\u0131daki bile\u015fenlere ihtiyac\u0131n\u0131z olacakt\u0131r:<\/p>\n<ul>\n<li><strong>JDK (Java Development Kit):<\/strong> Java uygulamalar\u0131 \u00e7al\u0131\u015ft\u0131rmak ve geli\u015ftirmek i\u00e7in gereklidir (Java 8 veya \u00fcst\u00fc \u00f6nerilir).<\/li>\n<li><strong>Maven veya Gradle:<\/strong> Proje ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00f6netmek ve derlemek i\u00e7in bir yap\u0131 arac\u0131.<\/li>\n<li><strong>IDE (Entegre Geli\u015ftirme Ortam\u0131):<\/strong> IntelliJ IDEA, Eclipse veya NetBeans gibi bir IDE, JSF geli\u015ftirme i\u00e7in g\u00fc\u00e7l\u00fc destek sunar.<\/li>\n<li><strong>Uygulama Sunucusu:<\/strong> JSF bir Servlet tabanl\u0131 \u00e7er\u00e7eve oldu\u011fu i\u00e7in bir Servlet kab\u0131na (Tomcat) veya bir tam te\u015fekk\u00fcll\u00fc Java EE\/Jakarta EE sunucusuna (WildFly, GlassFish, Open Liberty) ihtiyac\u0131n\u0131z olacakt\u0131r.<\/li>\n<\/ul>\n<p>Bir Maven projesi i\u00e7in temel <code>pom.xml<\/code> ba\u011f\u0131ml\u0131l\u0131klar\u0131:<\/p>\n<pre><code class=\"language-xml\">\n<dependencies>\n    <!-- JSF API ve Uygulamas\u0131 (Mojarra veya MyFaces) -->\n    <dependency>\n        <groupId>jakarta.platform<\/groupId<\n        <artifactId>jakarta.jakartaee-web-api<\/artifactId>\n        <version>9.1.0<\/version> <!-- Jakarta EE 9.1 i\u00e7in, JSF 3.0 i\u00e7erir -->\n        <scope>provided<\/scope>\n    <\/dependency>\n    <!-- E\u011fer sadece JSF 2.x kullan\u0131yorsan\u0131z (Java EE 8 ve \u00f6ncesi) -->\n    <!--\n    <dependency>\n        <groupId>com.sun.faces<\/groupId>\n        <artifactId>jsf-api<\/artifactId>\n        <version>2.3.9<\/version>\n        <scope>provided<\/scope>\n    <\/dependency>\n    <dependency>\n        <groupId>com.sun.faces<\/groupId>\n        <artifactId>jsf-impl<\/artifactId>\n        <version>2.3.9<\/version>\n        <scope>runtime<\/scope>\n    <\/dependency>\n    -->\n<\/dependencies>\n<\/code><\/pre>\n<p>Web uygulaman\u0131z\u0131n <code>WEB-INF\/web.xml<\/code> dosyas\u0131na Faces Servlet&#8217;i tan\u0131mlaman\u0131z gerekir:<\/p>\n<pre><code class=\"language-xml\">\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<web-app xmlns=\"https:\/\/jakarta.ee\/xml\/ns\/jakartaee\"\n         xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n         xsi:schemaLocation=\"https:\/\/jakarta.ee\/xml\/ns\/jakartaee https:\/\/jakarta.ee\/xml\/ns\/jakartaee\/web-app_5_0.xsd\"\n         version=\"5.0\">\n\n    <servlet>\n        <servlet-name>Faces Servlet<\/servlet-name>\n        <servlet-class>jakarta.faces.webapp.FacesServlet<\/servlet-class>\n        <load-on-startup>1<\/load-on-startup>\n    <\/servlet>\n    <servlet-mapping>\n        <servlet-name>Faces Servlet<\/servlet-name>\n        <url-pattern><em>.xhtml<\/url-pattern> <!-- veya \/faces\/<\/em> -->\n    <\/servlet-mapping>\n\n    <welcome-file-list>\n        <welcome-file>index.xhtml<\/welcome-file>\n    <\/welcome-file-list>\n\n<\/web-app>\n<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma, t\u00fcm <code>.xhtml<\/code> uzant\u0131l\u0131 isteklerin Faces Servlet taraf\u0131ndan i\u015flenmesini sa\u011flar.<\/p>\n<h2>JSF ile \u0130lk Uygulama: Merhaba D\u00fcnya<\/h2>\n<p>\u015eimdi temel bir &#8220;Merhaba D\u00fcnya&#8221; JSF uygulamas\u0131 olu\u015ftural\u0131m. Bu uygulama, kullan\u0131c\u0131dan bir isim alacak ve bu isimle ki\u015fiselle\u015ftirilmi\u015f bir mesaj g\u00f6sterecektir.<\/p>\n<h3>Y\u00f6netilen Bean Olu\u015fturma (Managed Bean \/ CDI Bean)<\/h3>\n<p>JSF&#8217;te i\u015f mant\u0131\u011f\u0131 ve veriler &#8220;Managed Bean&#8221; ad\u0131 verilen Java s\u0131n\u0131flar\u0131nda bulunur. JSF 2.x&#8217;ten itibaren, bu bean&#8217;ler genellikle CDI (Contexts and Dependency Injection) kullan\u0131larak <code>@Named<\/code> anotasyonu ile tan\u0131mlan\u0131r. JSF 2.2 ve \u00f6ncesinde <code>@ManagedBean<\/code> de kullan\u0131labilir, ancak modern yakla\u015f\u0131mlarda <code>@Named<\/code> tercih edilir.<\/p>\n<pre><code class=\"language-java\">\npackage com.example.jsftutorial;\n\nimport jakarta.enterprise.context.RequestScoped;\nimport jakarta.inject.Named;\nimport java.io.Serializable;\n\n@Named \/\/ Bu s\u0131n\u0131f\u0131 bir CDI bean olarak i\u015faretler ve varsay\u0131lan olarak \"merhabaBean\" ad\u0131yla eri\u015filebilir yapar\n@RequestScoped \/\/ Bu bean'in her HTTP iste\u011fi i\u00e7in yeni bir \u00f6rne\u011finin olu\u015fturulaca\u011f\u0131n\u0131 belirtir\npublic class MerhabaBean implements Serializable {\n\n    private String isim;\n    private String mesaj;\n\n    public String getIsim() {\n        return isim;\n    }\n\n    public void setIsim(String isim) {\n        this.isim = isim;\n    }\n\n    public String getMesaj() {\n        return mesaj;\n    }\n\n    public void setMesaj(String mesaj) {\n        this.mesaj = mesaj;\n    }\n\n    public String selamVer() {\n        if (isim != null && !isim.trim().isEmpty()) {\n            mesaj = \"Merhaba, \" + isim + \"!\";\n        } else {\n            mesaj = \"L\u00fctfen isminizi girin.\";\n        }\n        return null; \/\/ Ayn\u0131 sayfada kalmak i\u00e7in null d\u00f6nd\u00fcr\u00fcl\u00fcr\n    }\n}\n<\/code><\/pre>\n<p>Yukar\u0131daki kodda, <code>MerhabaBean<\/code> s\u0131n\u0131f\u0131 <code>@Named<\/code> ve <code>@RequestScoped<\/code> anotasyonlar\u0131 ile tan\u0131mlanm\u0131\u015ft\u0131r. <code>isim<\/code> ve <code>mesaj<\/code> \u00f6zellikleri ile <code>selamVer()<\/code> metodu bulunmaktad\u0131r. <code>selamVer()<\/code> metodu, kullan\u0131c\u0131dan al\u0131nan ismi kullanarak bir mesaj olu\u015fturur.<\/p>\n<h3>Facelets Sayfas\u0131 Olu\u015fturma<\/h3>\n<p>JSF&#8217;te kullan\u0131c\u0131 aray\u00fczleri genellikle Facelets ad\u0131 verilen XHTML tabanl\u0131 \u015fablonlama dili ile olu\u015fturulur. <code>src\/main\/webapp<\/code> dizini alt\u0131na <code>index.xhtml<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-xml\">\n<!DOCTYPE html>\n<html xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"\n      xmlns:h=\"http:\/\/xmlns.jcp.org\/jsf\/html\"\n      xmlns:f=\"http:\/\/xmlns.jcp.org\/jsf\/core\">\n<head>\n    <title>JSF Merhaba D\u00fcnya<\/title>\n<\/head>\n<body>\n    <h:form>\n        <h:outputLabel for=\"isimInput\" value=\"Ad\u0131n\u0131z:\" \/>\n        <h:inputText id=\"isimInput\" value=\"#{merhabaBean.isim}\" \/>\n        <h:commandButton value=\"Selam Ver\" action=\"#{merhabaBean.selamVer}\" \/>\n        <h:outputText value=\"#{merhabaBean.mesaj}\" \/>\n    <\/h:form>\n<\/body>\n<\/html>\n<\/code><\/pre>\n<p>Bu XHTML dosyas\u0131nda:<\/p>\n<ul>\n<li><code>xmlns:h<\/code> ve <code>xmlns:f<\/code> \u00f6nekleri, JSF HTML ve Core bile\u015fen k\u00fct\u00fcphanelerini tan\u0131mlar.<\/li>\n<li><code><h:form><\/code> HTML formunu temsil eder.<\/li>\n<li><code><h:outputLabel><\/code> bir metin etiketi olu\u015fturur.<\/li>\n<li><code><h:inputText><\/code> bir metin giri\u015f alan\u0131 olu\u015fturur. <code>value=\"#{merhabaBean.isim}\"<\/code> Expression Language (EL) kullanarak <code>MerhabaBean<\/code>&#8216;deki <code>isim<\/code> \u00f6zelli\u011fine ba\u011flan\u0131r.<\/li>\n<li><code><h:commandButton><\/code> bir d\u00fc\u011fme olu\u015fturur. <code>action=\"#{merhabaBean.selamVer}\"<\/code> d\u00fc\u011fmeye t\u0131kland\u0131\u011f\u0131nda <code>MerhabaBean<\/code>&#8216;deki <code>selamVer()<\/code> metodunun \u00e7a\u011fr\u0131lmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code><h:outputText><\/code> bir metin g\u00f6sterir. <code>value=\"#{merhabaBean.mesaj}\"<\/code> <code>MerhabaBean<\/code>&#8216;deki <code>mesaj<\/code> \u00f6zelli\u011finin de\u011ferini g\u00f6sterir.<\/li>\n<\/ul>\n<h3>Uygulamay\u0131 \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Projenizi bir WAR dosyas\u0131 olarak paketleyin (<code>mvn clean package<\/code>) ve uygulama sunucunuza (\u00f6rne\u011fin Tomcat veya WildFly) da\u011f\u0131t\u0131n. Ard\u0131ndan taray\u0131c\u0131n\u0131zdan <code>http:\/\/localhost:8080\/your_app_name\/index.xhtml<\/code> adresine giderek uygulaman\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz. Metin kutusuna ad\u0131n\u0131z\u0131 girip &#8220;Selam Ver&#8221; d\u00fc\u011fmesine t\u0131klad\u0131\u011f\u0131n\u0131zda, ki\u015fiselle\u015ftirilmi\u015f mesaj\u0131 g\u00f6receksiniz.<\/p>\n<h2>JSF&#8217;in G\u00fc\u00e7l\u00fc Y\u00f6nleri: Bile\u015fenler, Do\u011frulama ve Olaylar<\/h2>\n<p>JSF, sadece basit formlar olu\u015fturmakla kalmaz, ayn\u0131 zamanda geli\u015fmi\u015f UI bile\u015fenleri, veri do\u011frulama ve AJAX gibi \u00f6zelliklerle zengin web uygulamalar\u0131 geli\u015ftirmenizi sa\u011flar.<\/p>\n<h3>Giri\u015f ve \u00c7\u0131k\u0131\u015f Bile\u015fenleri<\/h3>\n<p>JSF, zengin bir standart UI bile\u015fenleri seti sunar:<\/p>\n<ul>\n<li><strong>Giri\u015f Bile\u015fenleri:<\/strong> <code><h:inputText><\/code>, <code><h:inputSecret><\/code> (\u015fifre i\u00e7in), <code><h:selectOneMenu><\/code> (a\u00e7\u0131l\u0131r liste), <code><h:selectManyCheckbox><\/code> (\u00e7oklu se\u00e7im kutular\u0131), <code><h:textarea><\/code>.<\/li>\n<li><strong>\u00c7\u0131k\u0131\u015f Bile\u015fenleri:<\/strong> <code><h:outputText><\/code>, <code><h:outputLabel><\/code>, <code><h:graphicImage><\/code>, <code><h:panelGrid><\/code> (\u0131zgara d\u00fczeni), <code><h:dataTable><\/code> (tablo).<\/li>\n<\/ul>\n<p>\u00d6rnek bir a\u00e7\u0131l\u0131r liste ve tablo kullan\u0131m\u0131:<\/p>\n<pre><code class=\"language-xml\">\n<h:form>\n    <h:outputLabel for=\"sehir\" value=\"\u015eehir Se\u00e7in:\" \/>\n    <h:selectOneMenu id=\"sehir\" value=\"#{kullaniciBean.secilenSehir}\">\n        <f:selectItem itemValue=\"IST\" itemLabel=\"\u0130stanbul\" \/>\n        <f:selectItem itemValue=\"ANK\" itemLabel=\"Ankara\" \/>\n        <f:selectItem itemValue=\"IZM\" itemLabel=\"\u0130zmir\" \/>\n    <\/h:selectOneMenu>\n    <h:commandButton value=\"G\u00f6ster\" action=\"#{kullaniciBean.gosterSehir}\" \/>\n    <h:outputText value=\"#{kullaniciBean.mesaj}\" \/>\n\n    <h:dataTable value=\"#{kullaniciBean.kullanicilar}\" var=\"k\" border=\"1\">\n        <h:column>\n            <f:facet name=\"header\">ID<\/f:facet>\n            <h:outputText value=\"#{k.id}\" \/>\n        <\/h:column>\n        <h:column>\n            <f:facet name=\"header\">Ad<\/f:facet>\n            <h:outputText value=\"#{k.ad}\" \/>\n        <\/h:column>\n        <h:column>\n            <f:facet name=\"header\">Soyad<\/f:facet>\n            <h:outputText value=\"#{k.soyad}\" \/>\n        <\/h:column>\n    <\/h:dataTable>\n<\/h:form>\n<\/code><\/pre>\n<h3>Veri Do\u011frulama (Validation)<\/h3>\n<p>JSF, kullan\u0131c\u0131 giri\u015flerini sunucu taraf\u0131nda do\u011frulamak i\u00e7in g\u00fc\u00e7l\u00fc bir mekanizma sunar. Standart do\u011frulay\u0131c\u0131lar veya \u00f6zel do\u011frulay\u0131c\u0131lar kullanabilirsiniz.<\/p>\n<pre><code class=\"language-xml\">\n<h:form>\n    <h:outputLabel for=\"yas\" value=\"Ya\u015f\u0131n\u0131z:\" \/>\n    <h:inputText id=\"yas\" value=\"#{kullaniciBean.yas}\" required=\"true\">\n        <f:validateLongRange minimum=\"18\" maximum=\"99\" \/>\n    <\/h:inputText>\n    <h:message for=\"yas\" style=\"color: red;\" \/> <!-- Hata mesaj\u0131n\u0131 g\u00f6sterir -->\n\n    <h:outputLabel for=\"email\" value=\"E-posta:\" \/>\n    <h:inputText id=\"email\" value=\"#{kullaniciBean.email}\">\n        <f:validator validatorId=\"emailValidator\" \/> <!-- \u00d6zel do\u011frulay\u0131c\u0131 -->\n    <\/h:inputText>\n    <h:message for=\"email\" style=\"color: red;\" \/>\n\n    <h:commandButton value=\"Kaydet\" action=\"#{kullaniciBean.kaydet}\" \/>\n    <h:messages style=\"color: green;\" \/> <!-- T\u00fcm mesajlar\u0131 g\u00f6sterir -->\n<\/h:form>\n<\/code><\/pre>\n<p><code><f:validateLongRange><\/code> gibi etiketler, giri\u015f alan\u0131na belirli kurallar uygular. <code>required=\"true\"<\/code> ile alan\u0131n bo\u015f b\u0131rak\u0131lamayaca\u011f\u0131n\u0131 belirtiriz. Hata mesajlar\u0131n\u0131 g\u00f6stermek i\u00e7in <code><h:message><\/code> (belirli bir alan i\u00e7in) veya <code><h:messages><\/code> (t\u00fcm mesajlar i\u00e7in) kullan\u0131l\u0131r.<\/p>\n<h3>Olay \u0130\u015fleme (Event Handling) ve AJAX<\/h3>\n<p>JSF, kullan\u0131c\u0131 etkile\u015fimlerini olaylar olarak ele al\u0131r. Bir d\u00fc\u011fmeye t\u0131klama veya bir giri\u015f alan\u0131n\u0131n de\u011feri de\u011fi\u015fti\u011finde olaylar tetiklenebilir.<\/p>\n<ul>\n<li><strong>Action Events:<\/strong> <code><h:commandButton><\/code> veya <code><h:commandLink><\/code> gibi bile\u015fenlerle ili\u015fkilidir. <code>action<\/code> \u00f6zelli\u011fi ile bir metot \u00e7a\u011fr\u0131l\u0131r.<\/li>\n<li><strong>Value Change Events:<\/strong> <code><h:inputText><\/code> gibi giri\u015f bile\u015fenlerinin de\u011feri de\u011fi\u015fti\u011finde tetiklenir. <code><f:valueChangeListener><\/code> ile dinlenebilir.<\/li>\n<\/ul>\n<p>JSF, AJAX (Asynchronous JavaScript and XML) deste\u011fini <code><f:ajax><\/code> etiketi ile kolayca sa\u011flar. Bu, sayfan\u0131n tamam\u0131n\u0131 yenilemeden belirli b\u00f6l\u00fcmlerini g\u00fcncellemenizi sa\u011flar.<\/p>\n<pre><code class=\"language-xml\">\n<h:form>\n    <h:outputLabel for=\"ad\" value=\"Ad\u0131n\u0131z:\" \/>\n    <h:inputText id=\"ad\" value=\"#{ajaxBean.ad}\">\n        <f:ajax event=\"keyup\" render=\"selamOutput\" \/> <!-- Her tu\u015f bas\u0131m\u0131nda selamOutput'u g\u00fcncelle -->\n    <\/h:inputText>\n    <h:outputText id=\"selamOutput\" value=\"Merhaba, #{ajaxBean.ad}!\" \/>\n<\/h:form>\n<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code><h:inputText><\/code> alan\u0131na her karakter girildi\u011finde (<code>event=\"keyup\"<\/code>), <code>ajaxBean.ad<\/code> g\u00fcncellenir ve <code><h:outputText id=\"selamOutput\"><\/code> alan\u0131 otomatik olarak yenilenir (<code>render=\"selamOutput\"<\/code>). Bu, kullan\u0131c\u0131n\u0131n sayfay\u0131 yenilemeden an\u0131nda geri bildirim almas\u0131n\u0131 sa\u011flar.<\/p>\n<h2>Pratik \u0130pu\u00e7lar\u0131 ve Sonu\u00e7<\/h2>\n<h3>Pratik \u0130pu\u00e7lar\u0131<\/h3>\n<ul>\n<li><strong>Bile\u015fen K\u00fct\u00fcphaneleri Kullan\u0131n:<\/strong> JSF&#8217;in en b\u00fcy\u00fck avantajlar\u0131ndan biri, PrimeFaces, OmniFaces, RichFaces (art\u0131k geli\u015fmiyor) gibi zengin \u00fc\u00e7\u00fcnc\u00fc taraf bile\u015fen k\u00fct\u00fcphanelerine sahip olmas\u0131d\u0131r. Bu k\u00fct\u00fcphaneler, takvimler, veri tablolar\u0131, grafikler ve daha fazlas\u0131 gibi geli\u015fmi\u015f UI bile\u015fenlerini kolayca uygulaman\u0131za entegre etmenizi sa\u011flar. PrimeFaces, \u00f6zellikle pop\u00fcler ve g\u00fcncel bir se\u00e7enektir.<\/li>\n<li><strong>Kapsamlara Dikkat Edin:<\/strong> Managed Bean&#8217;lerinizi do\u011fru kapsamda (<code>@RequestScoped<\/code>, <code>@ViewScoped<\/code>, <code>@SessionScoped<\/code>, <code>@ApplicationScoped<\/code>) tan\u0131mlamak, uygulaman\u0131z\u0131n performans\u0131n\u0131 ve do\u011fru \u00e7al\u0131\u015fmas\u0131n\u0131 etkiler. \u00d6zellikle AJAX yo\u011fun uygulamalarda <code>@ViewScoped<\/code> kullan\u0131m\u0131, sayfa durumunun korunmas\u0131 i\u00e7in \u00f6nemlidir.<\/li>\n<li><strong>Hata Ay\u0131klama ve Loglama:<\/strong> JSF&#8217;te bir sorunla kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda, uygulama sunucusu loglar\u0131n\u0131 dikkatlice inceleyin. JSF&#8217;in ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc anlamak, hatalar\u0131n nedenini bulman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/li>\n<li><strong>G\u00fcvenlik:<\/strong> JSF, CSRF (\u00c7apraz Site \u0130stek Sahtecili\u011fi) gibi baz\u0131 g\u00fcvenlik a\u00e7\u0131klar\u0131na kar\u015f\u0131 yerle\u015fik korumalar sunar. Ancak XSS (\u00c7apraz Site Betik \u00c7al\u0131\u015ft\u0131rma) gibi di\u011fer g\u00fcvenlik a\u00e7\u0131klar\u0131na kar\u015f\u0131 dikkatli olmal\u0131s\u0131n\u0131z. Giri\u015f verilerini her zaman sanitize edin.<\/li>\n<li><strong>Uluslararas\u0131la\u015ft\u0131rma (i18n):<\/strong> JSF, kolayca \u00e7ok dilli uygulamalar olu\u015fturman\u0131za olanak tan\u0131r. <code>ResourceBundle<\/code> kullanarak mesajlar\u0131 farkl\u0131 diller i\u00e7in ayr\u0131 dosyalarda tutabilirsiniz.<\/li>\n<\/ul>\n<h3>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p>JSF, Java geli\u015ftiricileri i\u00e7in g\u00fc\u00e7l\u00fc, olgun ve bile\u015fen tabanl\u0131 bir web \u00e7er\u00e7evesidir. \u00d6zellikle kurumsal ve veri odakl\u0131 uygulamalar geli\u015ftirmede b\u00fcy\u00fck kolayl\u0131klar sa\u011flar. Modern JavaScript framework&#8217;lerinin y\u00fckseli\u015fiyle birlikte, JSF baz\u0131 geli\u015ftiriciler taraf\u0131ndan eski moda olarak g\u00f6r\u00fclebilir, ancak hala bir\u00e7ok projede aktif olarak kullan\u0131lmaktad\u0131r ve Jakarta EE ekosisteminin \u00f6nemli bir par\u00e7as\u0131d\u0131r.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h4>\n<dl>\n<dt>JSF modern mi?<\/dt>\n<dd>JSF, s\u00fcrekli olarak g\u00fcncellenen ve geli\u015ftirilen bir teknolojidir. Jakarta Faces (\u00f6nceden JSF) olarak Jakarta EE&#8217;nin bir par\u00e7as\u0131 olmaya devam etmektedir. JSF 2.3 ve sonraki s\u00fcr\u00fcmleri, HTML5, WebSocket ve AJAX gibi modern web teknolojileriyle uyumlu hale getirilmi\u015ftir. Ancak, frontend geli\u015ftirme d\u00fcnyas\u0131ndaki h\u0131zl\u0131 de\u011fi\u015fimler g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, React veya Angular gibi tamamen client-side framework&#8217;ler kadar &#8220;modern&#8221; bir geli\u015ftirme deneyimi sunmayabilir. Yine de, sunucu taraf\u0131 renderlama ve bile\u015fen tabanl\u0131 yakla\u015f\u0131m\u0131 tercih eden projeler i\u00e7in ge\u00e7erli bir se\u00e7enektir.<\/dd>\n<dt>JSF&#8217;in dezavantajlar\u0131 nelerdir?<\/dt>\n<dd>JSF&#8217;in baz\u0131 dezavantajlar\u0131 \u015funlar olabilir: \u00f6\u011frenme e\u011frisi (\u00f6zellikle ya\u015fam d\u00f6ng\u00fcs\u00fc ve bile\u015fen modeli), bazen karma\u015f\u0131k view state y\u00f6netimi, client-side k\u00fct\u00fcphanelerle entegrasyonun di\u011fer framework&#8217;lere g\u00f6re daha zor olabilmesi ve sayfa yenileme modelinin (AJAX ile azalt\u0131lsa da) modern SPA (Single Page Application) deneyiminden farkl\u0131 olmas\u0131.<\/dd>\n<dt>JSF hangi senaryolarda tercih edilmelidir?<\/dt>\n<dd>JSF, \u00f6zellikle a\u015fa\u011f\u0131daki senaryolarda tercih edilebilir:<\/dd>\n<ul>\n<li>Geni\u015f \u00f6l\u00e7ekli, veri odakl\u0131 kurumsal uygulamalar.<\/li>\n<li>CRUD (Create, Read, Update, Delete) operasyonlar\u0131n\u0131n yo\u011fun oldu\u011fu i\u015f uygulamalar\u0131.<\/li>\n<li>Java ekosistemine s\u0131k\u0131ca ba\u011fl\u0131, g\u00fc\u00e7l\u00fc backend entegrasyonu gerektiren projeler.<\/li>\n<li>Sunucu taraf\u0131nda daha fazla kontrol ve i\u015fleme g\u00fcc\u00fc istenen durumlar.<\/li>\n<li>PrimeFaces gibi zengin bile\u015fen k\u00fct\u00fcphaneleriyle h\u0131zl\u0131 UI geli\u015ftirme ihtiyac\u0131 olan projeler.<\/li>\n<\/ul>\n<dt>JSF ile REST API geli\u015ftirilebilir mi?<\/dt>\n<dd>JSF, genellikle kullan\u0131c\u0131 aray\u00fcz\u00fc odakl\u0131 bir \u00e7er\u00e7evedir ve do\u011frudan REST API geli\u015ftirmek i\u00e7in tasarlanmam\u0131\u015ft\u0131r. REST API&#8217;leri geli\u015ftirmek i\u00e7in Jakarta REST (JAX-RS) gibi teknolojiler daha uygundur. Ancak, bir JSF uygulamas\u0131 i\u00e7inde JAX-RS kaynaklar\u0131 da bar\u0131nd\u0131rabilirsiniz. JSF, kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc sa\u011flarken, JAX-RS ayr\u0131 bir endpoint \u00fczerinden veri servisleri sunabilir.<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi\nJavaServer Faces (JSF), Java tabanl\u0131 web uygulamalar\u0131 geli\u015ftirme","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[874],"tags":[],"class_list":{"0":"post-31577","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-server","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi\" \/>\n<meta property=\"og:description\" content=\"JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi JavaServer Faces (JSF), Java tabanl\u0131 web uygulamalar\u0131 geli\u015ftirme\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-11T09:42:14+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi\",\"datePublished\":\"2025-10-11T09:42:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/\"},\"wordCount\":1993,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Server\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/\",\"name\":\"JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-11T09:42:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi","og_description":"JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi JavaServer Faces (JSF), Java tabanl\u0131 web uygulamalar\u0131 geli\u015ftirme","og_url":"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-11T09:42:14+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"4 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi","datePublished":"2025-10-11T09:42:14+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/"},"wordCount":1993,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Server"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/","name":"JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-11T09:42:14+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/jsf-tutorial-javaserver-faces-ile-modern-web-uygulamalari-gelistirme-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JSF Tutorial: JavaServer Faces ile Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31577","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31577"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31577\/revisions"}],"predecessor-version":[{"id":31578,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31577\/revisions\/31578"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31577"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31577"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31577"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}