{"id":34524,"date":"2025-11-18T06:41:47","date_gmt":"2025-11-18T03:41:47","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34524"},"modified":"2025-11-18T06:41:47","modified_gmt":"2025-11-18T03:41:47","slug":"jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/","title":{"rendered":"JSF PrimeFaces Tutorial: Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>JSF PrimeFaces Tutorial: 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. JSF, geli\u015ftiricilerin modern ve etkile\u015fimli web uygulamalar\u0131n\u0131 kolayca olu\u015fturmas\u0131n\u0131 sa\u011flayan g\u00fc\u00e7l\u00fc bir yap\u0131 sunar. Ancak, sadece JSF ile zengin ve g\u00f6rsel olarak \u00e7ekici bir kullan\u0131c\u0131 aray\u00fcz\u00fc olu\u015fturmak, genellikle ek k\u00fct\u00fcphaneler ve bile\u015fen setleri gerektirir. \u0130\u015fte tam bu noktada PrimeFaces devreye girer.<\/p>\n<p>PrimeFaces, JSF i\u00e7in geli\u015ftirilmi\u015f, a\u00e7\u0131k kaynakl\u0131, zengin bir bile\u015fen k\u00fct\u00fcphanesidir. Y\u00fczlerce haz\u0131r UI bile\u015feni, AJAX deste\u011fi, temaland\u0131rma se\u00e7enekleri ve mobil uyumluluk gibi \u00f6zellikleriyle PrimeFaces, JSF uygulamalar\u0131na modern bir g\u00f6r\u00fcn\u00fcm ve his katman\u0131n en pop\u00fcler yollar\u0131ndan biridir. Bu rehberde, JSF ve PrimeFaces kullanarak nas\u0131l dinamik ve etkile\u015fimli web uygulamalar\u0131 geli\u015ftirebilece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, pratik \u00f6rneklerle konuyu peki\u015ftireceksiniz.<\/p>\n<h3>JSF ve PrimeFaces Ortam Kurulumu<\/h3>\n<p>Bir JSF PrimeFaces projesi geli\u015ftirmeye ba\u015flamadan \u00f6nce, gerekli ortam\u0131n kuruldu\u011fundan emin olmal\u0131y\u0131z. \u0130\u015fte temel gereksinimler ve kurulum ad\u0131mlar\u0131:<\/p>\n<h4>Gereksinimler:<\/h4>\n<ul>\n<li><strong>Java Development Kit (JDK):<\/strong> En az Java 8 veya \u00fczeri.<\/li>\n<li><strong>IDE (Entegre Geli\u015ftirme Ortam\u0131):<\/strong> IntelliJ IDEA, Eclipse veya NetBeans gibi bir IDE.<\/li>\n<li><strong>Maven veya Gradle:<\/strong> Proje ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00f6netmek i\u00e7in bir derleme arac\u0131.<\/li>\n<li><strong>Uygulama Sunucusu:<\/strong> Apache Tomcat, WildFly (JBoss), Payara veya GlassFish gibi bir Java EE\/Jakarta EE uyumlu sunucu.<\/li>\n<\/ul>\n<h4>Maven ile Proje Olu\u015fturma ve Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Ekleme:<\/h4>\n<p>Yeni bir Maven Web projesi olu\u015fturarak ba\u015flayal\u0131m. IDE&#8217;nizde &#8220;Maven Project&#8221; veya &#8220;Web Application&#8221; \u015fablonunu se\u00e7ebilirsiniz. <code>pom.xml<\/code> dosyan\u0131za a\u015fa\u011f\u0131daki temel ba\u011f\u0131ml\u0131l\u0131klar\u0131 eklemeniz gerekmektedir:<\/p>\n<pre><code class=\"language-xml\">\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\"\n         xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n         xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0<\/modelVersion>\n\n    <groupId>com.example<\/groupId>\n    <artifactId>primefaces-tutorial<\/artifactId>\n    <version>1.0-SNAPSHOT<\/version>\n    <packaging>war<\/packaging>\n\n    <properties>\n        <maven.compiler.source>11<\/maven.compiler.source>\n        <maven.compiler.target>11<\/maven.compiler.target>\n        <project.build.sourceEncoding>UTF-8<\/project.build.sourceEncoding>\n        <jakartaee.version>8.0.0<\/jakartaee.version> <!-- Veya Javax.servlet i\u00e7in 4.0.1 gibi uygun bir versiyon -->\n        <jsf.version>2.3.14.SP04<\/jsf.version> <!-- Mojarra i\u00e7in g\u00fcncel versiyon -->\n        <primefaces.version>12.0.0<\/primefaces.version> <!-- PrimeFaces i\u00e7in g\u00fcncel versiyon -->\n    <\/properties>\n\n    <dependencies>\n        <!-- Jakarta EE (JSF, Servlet API vb. i\u00e7erir) -->\n        <dependency>\n            <groupId>jakarta.platform<\/groupId>\n            <artifactId>jakarta.jakartaee-web-api<\/artifactId>\n            <version>${jakartaee.version}<\/version>\n            <scope>provided<\/scope>\n        <\/dependency>\n\n        <!-- JSF (Mojarra Implementasyonu) -->\n        <dependency>\n            <groupId>org.glassfish<\/groupId>\n            <artifactId>jakarta.faces<\/artifactId>\n            <version>${jsf.version}<\/version>\n        <\/dependency>\n\n        <!-- PrimeFaces K\u00fct\u00fcphanesi -->\n        <dependency>\n            <groupId>org.primefaces<\/groupId>\n            <artifactId>primefaces<\/artifactId>\n            <version>${primefaces.version}<\/version>\n        <\/dependency>\n\n        <!-- CDI (Managed Beans i\u00e7in) -->\n        <dependency>\n            <groupId>jakarta.enterprise<\/groupId>\n            <artifactId>jakarta.enterprise.cdi-api<\/artifactId>\n            <version>2.0.2<\/version>\n            <scope>provided<\/scope>\n        <\/dependency>\n    <\/dependencies>\n\n    <build>\n        <plugins>\n            <!-- Maven WAR Plugin -->\n            <plugin>\n                <groupId>org.apache.maven.plugins<\/groupId>\n                <artifactId>maven-war-plugin<\/artifactId>\n                <version>3.3.2<\/version>\n            <\/plugin>\n            <!-- Maven Compiler Plugin -->\n            <plugin>\n                <groupId>org.apache.maven.plugins<\/groupId>\n                <artifactId>maven-compiler-plugin<\/artifactId>\n                <version>3.8.1<\/version>\n                <configuration>\n                    <source>${maven.compiler.source}<\/source>\n                    <target>${maven.compiler.target}<\/target>\n                <\/configuration>\n            <\/plugin>\n        <\/plugins>\n    <\/build>\n<\/project>\n<\/code><\/pre>\n<p><strong>Not:<\/strong> Jakarta EE ba\u011f\u0131ml\u0131l\u0131klar\u0131, kulland\u0131\u011f\u0131n\u0131z uygulama sunucusunun versiyonuna g\u00f6re de\u011fi\u015febilir. E\u011fer Java EE 8 kullan\u0131yorsan\u0131z <code>javax.faces<\/code> ve <code>javax.servlet<\/code> ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 kullanman\u0131z gerekebilir.<\/p>\n<h4>web.xml Yap\u0131land\u0131rmas\u0131:<\/h4>\n<p>Web uygulaman\u0131z\u0131n da\u011f\u0131t\u0131m tan\u0131mlay\u0131c\u0131s\u0131 olan <code>src\/main\/webapp\/WEB-INF\/web.xml<\/code> dosyas\u0131na JSF&#8217;in <code>FacesServlet<\/code>&#8216;ini eklemelisiniz. Bu servlet, t\u00fcm JSF isteklerini i\u015flemekten sorumludur:<\/p>\n<pre><code class=\"language-xml\">\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<web-app xmlns=\"http:\/\/xmlns.jcp.org\/xml\/ns\/javaee\"\n         xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n         xsi:schemaLocation=\"http:\/\/xmlns.jcp.org\/xml\/ns\/javaee http:\/\/xmlns.jcp.org\/xml\/ns\/javaee\/web-app_4_0.xsd\"\n         version=\"4.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>*.xhtml<\/url-pattern>\n    <\/servlet-mapping>\n\n    <welcome-file-list>\n        <welcome-file>index.xhtml<\/welcome-file>\n    <\/welcome-file-list>\n\n    <!-- JSF Development Mode (opsiyonel, geli\u015ftirme a\u015famas\u0131nda hatalar\u0131 g\u00f6rmeyi kolayla\u015ft\u0131r\u0131r) -->\n    <context-param>\n        <param-name>jakarta.faces.PROJECT_STAGE<\/param-name>\n        <param-value>Development<\/param-value>\n    <\/context-param>\n\n    <!-- PrimeFaces Theme (\u00f6rne\u011fin 'saga', 'arya', 'nova-light') -->\n    <context-param>\n        <param-name>primefaces.THEME<\/param-name>\n        <param-value>saga<\/param-value>\n    <\/context-param>\n\n<\/web-app>\n<\/code><\/pre>\n<p>Art\u0131k temel kurulum tamamland\u0131. Projenizi derleyip bir uygulama sunucusuna da\u011f\u0131tabilirsiniz.<\/p>\n<h3>Temel PrimeFaces Bile\u015fenleri ve Kullan\u0131m\u0131<\/h3>\n<p>PrimeFaces bile\u015fenlerini kullanmak i\u00e7in, XHTML sayfalar\u0131n\u0131zda PrimeFaces namespace&#8217;ini tan\u0131mlaman\u0131z gerekir. Genellikle <code>p<\/code> \u00f6n eki kullan\u0131l\u0131r.<\/p>\n<h4>PrimeFaces Namespace Tan\u0131mlamas\u0131:<\/h4>\n<p>XHTML sayfan\u0131z\u0131n <code>html<\/code> etiketine a\u015fa\u011f\u0131daki tan\u0131m\u0131 ekleyin:<\/p>\n<pre><code class=\"language-xml\">\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      xmlns:p=\"http:\/\/primefaces.org\/ui\">\n<\/code><\/pre>\n<ul>\n<li><code>h<\/code>: Standart JSF HTML bile\u015fenleri i\u00e7in.<\/li>\n<li><code>f<\/code>: Standart JSF Core bile\u015fenleri (validator, converter vb.) i\u00e7in.<\/li>\n<li><code>p<\/code>: PrimeFaces bile\u015fenleri i\u00e7in.<\/li>\n<\/ul>\n<h4>Basit Bir Form Olu\u015fturma:<\/h4>\n<p>\u015eimdi bir kullan\u0131c\u0131 ad\u0131 ve \u015fifre giri\u015fi olan basit bir form ve bir buton olu\u015ftural\u0131m. Bunun i\u00e7in bir <strong>Managed Bean<\/strong> (CDI ile <code>@Named<\/code> veya JSF ile <code>@ManagedBean<\/code>) kullanaca\u011f\u0131z.<\/p>\n<h5>Kullan\u0131c\u0131 Verilerini Tutacak Bean (UserBean.java):<\/h5>\n<pre><code class=\"language-java\">\npackage com.example.beans;\n\nimport jakarta.enterprise.context.SessionScoped;\nimport jakarta.inject.Named;\nimport java.io.Serializable;\n\n@Named \/\/ CDI Managed Bean\n@SessionScoped \/\/ Oturum boyunca ya\u015far\npublic class UserBean implements Serializable {\n    private static final long serialVersionUID = 1L;\n\n    private String username;\n    private String password;\n    private String message;\n\n    public void login() {\n        if (\"admin\".equals(username) && \"123\".equals(password)) {\n            message = \"Giri\u015f Ba\u015far\u0131l\u0131! Ho\u015f geldiniz, \" + username;\n        } else {\n            message = \"Kullan\u0131c\u0131 ad\u0131 veya \u015fifre hatal\u0131!\";\n        }\n    }\n\n    \/\/ Getter ve Setter Metotlar\u0131\n    public String getUsername() { return username; }\n    public void setUsername(String username) { this.username = username; }\n    public String getPassword() { return password; }\n    public void setPassword(String password) { this.password = password; }\n    public String getMessage() { return message; }\n    public void setMessage(String message) { this.message = message; }\n}\n<\/code><\/pre>\n<h5>Kullan\u0131c\u0131 Aray\u00fcz\u00fc (index.xhtml):<\/h5>\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      xmlns:p=\"http:\/\/primefaces.org\/ui\">\n<h:head>\n    <title>PrimeFaces Giri\u015f Formu<\/title>\n<\/h:head>\n<h:body>\n    <p:panel header=\"Kullan\u0131c\u0131 Giri\u015fi\" style=\"width:300px; margin: 20px auto;\">\n        <h:form>\n            <h:panelGrid columns=\"2\" cellpadding=\"5\">\n                <p:outputLabel for=\"username\" value=\"Kullan\u0131c\u0131 Ad\u0131:\"\/>\n                <p:inputText id=\"username\" value=\"#{userBean.username}\" required=\"true\"\n                             requiredMessage=\"Kullan\u0131c\u0131 ad\u0131 bo\u015f olamaz!\"\/>\n\n                <p:outputLabel for=\"password\" value=\"\u015eifre:\"\/>\n                <p:password id=\"password\" value=\"#{userBean.password}\" required=\"true\"\n                            requiredMessage=\"\u015eifre bo\u015f olamaz!\"\/>\n\n                <p:commandButton value=\"Giri\u015f Yap\" action=\"#{userBean.login}\" update=\"@form\" style=\"margin-top:10px;\"\/>\n            <\/h:panelGrid>\n            <p:messages id=\"messages\" showDetail=\"true\" autoUpdate=\"true\" closable=\"true\"\/>\n            <h:outputText value=\"#{userBean.message}\" style=\"color: green; font-weight: bold; margin-top: 10px;\"\n                          rendered=\"#{not empty userBean.message}\"\/>\n        <\/h:form>\n    <\/p:panel>\n<\/h:body>\n<\/html>\n<\/code><\/pre>\n<p>Bu \u00f6rnekte:<\/p>\n<ul>\n<li><code>p:panel<\/code>: \u0130\u00e7eri\u011fi d\u00fczenli bir kutuya yerle\u015ftirir.<\/li>\n<li><code>p:outputLabel<\/code>: Etiket metni g\u00f6sterir.<\/li>\n<li><code>p:inputText<\/code>: Tek sat\u0131rl\u0131k metin giri\u015fi sa\u011flar. <code>required=\"true\"<\/code> ile zorunlu alan yap\u0131l\u0131r.<\/li>\n<li><code>p:password<\/code>: \u015eifre giri\u015fi i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><code>p:commandButton<\/code>: Bir eylem tetikleyen buton. <code>action<\/code> ile bean metodunu \u00e7a\u011f\u0131r\u0131r. <code>update=\"@form\"<\/code> ile AJAX kullanarak formun tamam\u0131n\u0131 g\u00fcnceller, b\u00f6ylece mesajlar ve di\u011fer dinamik i\u00e7erikler an\u0131nda yenilenir.<\/li>\n<li><code>p:messages<\/code>: JSF\/PrimeFaces mesajlar\u0131n\u0131 (do\u011frulama hatalar\u0131, ba\u015far\u0131l\u0131 mesajlar vb.) g\u00f6sterir. <code>autoUpdate=\"true\"<\/code> ile otomatik olarak g\u00fcncellenir.<\/li>\n<\/ul>\n<h4>Veri Listeleme (p:dataTable):<\/h4>\n<p>PrimeFaces&#8217;in en g\u00fc\u00e7l\u00fc bile\u015fenlerinden biri <code>p:dataTable<\/code>&#8216;d\u0131r. B\u00fcy\u00fck veri k\u00fcmelerini sayfaland\u0131rma, s\u0131ralama, filtreleme gibi \u00f6zelliklerle kolayca g\u00f6r\u00fcnt\u00fclemenizi sa\u011flar.<\/p>\n<h5>\u00dcr\u00fcn Verilerini Tutacak Bean (ProductBean.java):<\/h5>\n<pre><code class=\"language-java\">\npackage com.example.beans;\n\nimport jakarta.annotation.PostConstruct;\nimport jakarta.enterprise.context.SessionScoped;\nimport jakarta.inject.Named;\nimport java.io.Serializable;\nimport java.util.ArrayList;\nimport java.util.List;\n\n@Named\n@SessionScoped\npublic class ProductBean implements Serializable {\n    private static final long serialVersionUID = 1L;\n\n    private List<Product> products;\n\n    @PostConstruct\n    public void init() {\n        products = new ArrayList<>();\n        products.add(new Product(\"P101\", \"Laptop\", 1200.0, 50));\n        products.add(new Product(\"P102\", \"Mouse\", 25.0, 200));\n        products.add(new Product(\"P103\", \"Keyboard\", 75.0, 150));\n        products.add(new Product(\"P104\", \"Monitor\", 300.0, 80));\n    }\n\n    public List<Product> getProducts() { return products; }\n    public void setProducts(List<Product> products) { this.products = products; }\n\n    \/\/ Inner Class Product\n    public static class Product implements Serializable {\n        private String code;\n        private String name;\n        private double price;\n        private int quantity;\n\n        public Product(String code, String name, double price, int quantity) {\n            this.code = code;\n            this.name = name;\n            this.price = price;\n            this.quantity = quantity;\n        }\n\n        \/\/ Getter ve Setter Metotlar\u0131\n        public String getCode() { return code; }\n        public void setCode(String code) { this.code = code; }\n        public String getName() { return name; }\n        public void setName(String name) { this.name = name; }\n        public double getPrice() { return price; }\n        public void setPrice(double price) { this.price = price; }\n        public int getQuantity() { return quantity; }\n        public void setQuantity(int quantity) { this.quantity = quantity; }\n    }\n}\n<\/code><\/pre>\n<h5>Veri Tablosu (products.xhtml):<\/h5>\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      xmlns:p=\"http:\/\/primefaces.org\/ui\">\n<h:head>\n    <title>\u00dcr\u00fcn Listesi<\/title>\n<\/h:head>\n<h:body>\n    <h:form>\n        <p:dataTable var=\"product\" value=\"#{productBean.products}\" rows=\"5\" paginator=\"true\"\n                     paginatorTemplate=\"{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}\"\n                     rowsPerPageTemplate=\"5,10,15\" style=\"width: 80%; margin: 20px auto;\">\n            <f:facet name=\"header\">\n                \u00dcr\u00fcn Detaylar\u0131\n            <\/f:facet>\n\n            <p:column headerText=\"\u00dcr\u00fcn Kodu\">\n                <h:outputText value=\"#{product.code}\"\/>\n            <\/p:column>\n\n            <p:column headerText=\"\u00dcr\u00fcn Ad\u0131\">\n                <h:outputText value=\"#{product.name}\"\/>\n            <\/p:column>\n\n            <p:column headerText=\"Fiyat\">\n                <h:outputText value=\"#{product.price}\">\n                    <f:convertNumber type=\"currency\" currencySymbol=\"TL\"\/>\n                <\/h:outputText>\n            <\/p:column>\n\n            <p:column headerText=\"Adet\">\n                <h:outputText value=\"#{product.quantity}\"\/>\n            <\/p:column>\n        <\/p:dataTable>\n    <\/h:form>\n<\/h:body>\n<\/html>\n<\/code><\/pre>\n<p>Bu <code>p:dataTable<\/code> \u00f6rne\u011fi, <code>rows<\/code>, <code>paginator<\/code>, <code>paginatorTemplate<\/code> ve <code>rowsPerPageTemplate<\/code> gibi \u00f6zelliklerle veri sayfaland\u0131rmay\u0131 g\u00f6sterir. Ayr\u0131ca <code>f:convertNumber<\/code> ile fiyat formatlamas\u0131 yap\u0131lm\u0131\u015ft\u0131r.<\/p>\n<h3>PrimeFaces ile Daha \u0130leri Konular ve Pratik \u0130pu\u00e7lar\u0131<\/h3>\n<h4>AJAX Entegrasyonu ve K\u0131smi G\u00fcncelleme:<\/h4>\n<p>PrimeFaces, AJAX&#8217;\u0131 JSF&#8217;e entegre etmeyi son derece basitle\u015ftirir. <code>p:commandButton<\/code> ve <code>p:ajax<\/code> gibi bile\u015fenlerin <code>update<\/code> ve <code>process<\/code> nitelikleri ile sayfan\u0131n sadece belirli k\u0131s\u0131mlar\u0131n\u0131 g\u00fcncelleyebilirsiniz.<\/p>\n<ul>\n<li><code>update<\/code>: AJAX iste\u011fi tamamland\u0131ktan sonra g\u00fcncellenecek bile\u015fenlerin ID&#8217;leri. <code>@form<\/code>, <code>@this<\/code>, <code>@all<\/code> gibi \u00f6zel anahtar kelimeler de kullan\u0131labilir.<\/li>\n<li><code>process<\/code>: AJAX iste\u011fi g\u00f6nderilmeden \u00f6nce sunucuya g\u00f6nderilecek (i\u015flenecek) bile\u015fenlerin ID&#8217;leri. Varsay\u0131lan olarak <code>@this<\/code> (tetikleyen bile\u015fen) ve <code>update<\/code> edilen bile\u015fenler i\u015flenir.<\/li>\n<\/ul>\n<p>Yukar\u0131daki giri\u015f formunda <code>update=\"@form\"<\/code> kullanarak t\u00fcm formun g\u00fcncellenmesini sa\u011flam\u0131\u015ft\u0131k. Bu, kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<h4>Temaland\u0131rma (Theming):<\/h4>\n<p>PrimeFaces, uygulaman\u0131z\u0131n g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc kolayca \u00f6zelle\u015ftirmenizi sa\u011flayan bir\u00e7ok haz\u0131r temaya sahiptir. <code>web.xml<\/code> dosyas\u0131ndaki <code>primefaces.THEME<\/code> context parametresini de\u011fi\u015ftirerek teman\u0131z\u0131 ayarlayabilirsiniz. \u00d6rne\u011fin, <code>nova-light<\/code>, <code>saga<\/code>, <code>arya<\/code>, <code>luna-green<\/code> gibi temalar mevcuttur.<\/p>\n<p>Kendi teman\u0131z\u0131 olu\u015fturmak veya mevcut temalar\u0131 \u00f6zelle\u015ftirmek i\u00e7in PrimeFaces ThemeRoller arac\u0131n\u0131 kullanabilir veya CSS dosyalar\u0131n\u0131z\u0131 yazabilirsiniz.<\/p>\n<h4>Do\u011frulama (Validation):<\/h4>\n<p>JSF, g\u00fc\u00e7l\u00fc bir do\u011frulama API&#8217;sine sahiptir ve PrimeFaces bile\u015fenleri bu API ile tam uyumludur. <code>required=\"true\"<\/code> gibi temel do\u011frulamalar\u0131n yan\u0131 s\u0131ra, <code>f:validator<\/code>, <code>f:validateLongRange<\/code>, <code>f:validateRegex<\/code> gibi standart JSF validator&#8217;lar\u0131n\u0131 veya kendi \u00f6zel validator&#8217;lar\u0131n\u0131z\u0131 kullanabilirsiniz.<\/p>\n<pre><code class=\"language-xml\">\n<p:inputText value=\"#{bean.email}\" required=\"true\">\n    <f:validator validatorId=\"emailValidator\"\/> <!-- \u00d6zel bir validator -->\n<\/p:inputText>\n<p:message for=\"email\"\/> <!-- Belirli bir bile\u015fenin mesaj\u0131n\u0131 g\u00f6sterir -->\n<\/code><\/pre>\n<p>PrimeFaces ayr\u0131ca <code>p:calendar<\/code> i\u00e7in tarih do\u011frulamalar\u0131 veya <code>p:spinner<\/code> i\u00e7in say\u0131 aral\u0131\u011f\u0131 do\u011frulamalar\u0131 gibi bile\u015fene \u00f6zel do\u011frulama \u00f6zelliklerini de destekler.<\/p>\n<h4>Olay \u0130\u015fleme (Event Handling):<\/h4>\n<p><code>p:ajax<\/code> bile\u015feni, herhangi bir HTML veya PrimeFaces bile\u015fenine AJAX deste\u011fi eklemek i\u00e7in kullan\u0131labilir. \u00d6rne\u011fin, bir <code>p:inputText<\/code> alan\u0131ndaki de\u011feri an\u0131nda sunucuya g\u00f6ndermek ve ba\u015fka bir alan\u0131 g\u00fcncellemek i\u00e7in:<\/p>\n<pre><code class=\"language-xml\">\n<p:inputText value=\"#{bean.firstName}\">\n    <p:ajax event=\"keyup\" update=\"fullNameOutput\"\/> <!-- Her tu\u015f bas\u0131m\u0131nda g\u00fcnceller -->\n<\/p:inputText>\n<p:inputText value=\"#{bean.lastName}\">\n    <p:ajax event=\"keyup\" update=\"fullNameOutput\"\/>\n<\/p:inputText>\n<h:outputText id=\"fullNameOutput\" value=\"#{bean.fullName}\"\/>\n<\/code><\/pre>\n<p>Burada <code>event=\"keyup\"<\/code> ile klavye olay\u0131 tetiklendi\u011finde <code>fullNameOutput<\/code> g\u00fcncellenir. Bu, anl\u0131k geri bildirim sa\u011flayan etkile\u015fimli formlar olu\u015fturmak i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h4>Responsive Tasar\u0131m:<\/h4>\n<p>PrimeFaces, mobil cihazlarda iyi g\u00f6r\u00fcnen uygulamalar olu\u015fturmak i\u00e7in responsive tasar\u0131m yakla\u015f\u0131mlar\u0131n\u0131 destekler. Bir\u00e7ok bile\u015fen, farkl\u0131 ekran boyutlar\u0131na uyum sa\u011flamak i\u00e7in CSS tabanl\u0131 duyarl\u0131 \u00f6zelliklere sahiptir. Ayr\u0131ca, <code>p:layout<\/code> ve <code>p:panelGrid<\/code> gibi bile\u015fenler, esnek d\u00fczenler olu\u015fturman\u0131za yard\u0131mc\u0131 olabilir. Gerekirse kendi CSS medya sorgular\u0131n\u0131z\u0131 ekleyerek PrimeFaces bile\u015fenlerini daha da optimize edebilirsiniz.<\/p>\n<h3>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p>JSF ve PrimeFaces, Java geli\u015ftiricileri i\u00e7in modern ve etkile\u015fimli web uygulamalar\u0131 olu\u015fturmada g\u00fc\u00e7l\u00fc bir ikilidir. PrimeFaces&#8217;in zengin bile\u015fen k\u00fct\u00fcphanesi, AJAX entegrasyonu ve temaland\u0131rma se\u00e7enekleri sayesinde, karma\u015f\u0131k UI gereksinimlerini minimum \u00e7abayla kar\u015f\u0131layabilirsiniz. Bu rehber, temel kurulumdan geli\u015fmi\u015f bile\u015fen kullan\u0131m\u0131na kadar PrimeFaces ile \u00e7al\u0131\u015fmaya ba\u015flamak i\u00e7in sa\u011flam bir temel sa\u011flam\u0131\u015ft\u0131r. Daha fazla bile\u015fen ve \u00f6zellik ke\u015ffetmek i\u00e7in PrimeFaces dok\u00fcmantasyonunu incelemeniz \u015fiddetle tavsiye edilir.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular:<\/h4>\n<dl>\n<dt><strong>PrimeFaces hangi JSF versiyonlar\u0131n\u0131 destekler?<\/strong><\/dt>\n<dd>PrimeFaces, genellikle JSF&#8217;in en g\u00fcncel ve yayg\u0131n olarak kullan\u0131lan versiyonlar\u0131n\u0131 (JSF 2.2, 2.3 ve Jakarta Faces 3.x, 4.x) destekler. Kulland\u0131\u011f\u0131n\u0131z PrimeFaces versiyonuna g\u00f6re uyumlu JSF\/Jakarta Faces versiyonunu kontrol etmeniz \u00f6nemlidir. \u00d6rne\u011fin, PrimeFaces 12 ve \u00fczeri genellikle Jakarta EE 9+ (Jakarta Faces 3.x+) ile uyumludur.<\/dd>\n<dt><strong>PrimeFaces temalar\u0131 nas\u0131l \u00f6zelle\u015ftirilir?<\/strong><\/dt>\n<dd>PrimeFaces temalar\u0131n\u0131 <code>web.xml<\/code> dosyas\u0131ndaki <code>primefaces.THEME<\/code> parametresi ile de\u011fi\u015ftirebilirsiniz. Daha derinlemesine \u00f6zelle\u015ftirme i\u00e7in PrimeFaces ThemeRoller arac\u0131n\u0131 kullanarak \u00f6zel bir tema olu\u015fturabilir veya kendi CSS dosyalar\u0131n\u0131z\u0131 yazarak mevcut temalar\u0131n \u00fczerine stil tan\u0131mlayabilirsiniz. Custom CSS dosyalar\u0131n\u0131z\u0131 <code>h:outputStylesheet<\/code> ile sayfan\u0131za ekleyebilirsiniz.<\/dd>\n<dt><strong>PrimeFaces ile responsive tasar\u0131m m\u00fcmk\u00fcn m\u00fcd\u00fcr?<\/strong><\/dt>\n<dd>Evet, PrimeFaces bile\u015fenleri genellikle responsive (duyarl\u0131) tasar\u0131m prensiplerini destekler. \u00c7o\u011fu bile\u015fen, farkl\u0131 ekran boyutlar\u0131na uyum sa\u011flamak i\u00e7in CSS ve JavaScript kullan\u0131r. <code>p:layout<\/code>, <code>p:panelGrid<\/code> gibi bile\u015fenlerle esnek d\u00fczenler olu\u015fturulabilir. Ayr\u0131ca, kendi medya sorgular\u0131n\u0131z\u0131 i\u00e7eren CSS dosyalar\u0131n\u0131 ekleyerek bile\u015fenlerin davran\u0131\u015f\u0131n\u0131 ve g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc daha da optimize edebilirsiniz.<\/dd>\n<dt><strong>PrimeFaces bile\u015fenleri neden bazen \u00e7al\u0131\u015fm\u0131yor veya g\u00f6r\u00fcnm\u00fcyor?<\/strong><\/dt>\n<dd>Bu durum genellikle a\u015fa\u011f\u0131daki nedenlerden kaynaklan\u0131r:<\/p>\n<ul>\n<li>PrimeFaces namespace&#8217;inin (<code>xmlns:p=\"http:\/\/primefaces.org\/ui\"<\/code>) XHTML dosyas\u0131nda tan\u0131mlanmam\u0131\u015f olmas\u0131.<\/li>\n<li><code>web.xml<\/code> i\u00e7inde <code>FacesServlet<\/code>&#8216;in do\u011fru yap\u0131land\u0131r\u0131lmam\u0131\u015f olmas\u0131.<\/li>\n<li><code>pom.xml<\/code> dosyas\u0131nda PrimeFaces ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131n eksik veya yanl\u0131\u015f versiyonda olmas\u0131.<\/li>\n<li>Uygulama sunucusunun \u00f6nbellekleme sorunlar\u0131 (sunucuyu temizleyip yeniden ba\u015flatmak genellikle yard\u0131mc\u0131 olur).<\/li>\n<li>JavaScript hatalar\u0131 (taray\u0131c\u0131n\u0131n geli\u015ftirici konsolunu kontrol edin).<\/li>\n<\/ul>\n<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"JSF PrimeFaces Tutorial: Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi\nJavaServer Faces (JSF), Java tabanl\u0131 web uygulamalar\u0131 geli\u015ftirmek i\u00e7in st","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":[1],"tags":[],"class_list":{"0":"post-34524","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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 PrimeFaces Tutorial: 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-primefaces-tutorial-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 PrimeFaces Tutorial: Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi\" \/>\n<meta property=\"og:description\" content=\"JSF PrimeFaces Tutorial: Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi JavaServer Faces (JSF), Java tabanl\u0131 web uygulamalar\u0131 geli\u015ftirmek i\u00e7in st\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-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-11-18T03:41:47+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=\"9 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"JSF PrimeFaces Tutorial: Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi\",\"datePublished\":\"2025-11-18T03:41:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/\"},\"wordCount\":1386,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/\",\"name\":\"JSF PrimeFaces Tutorial: Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-18T03:41:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JSF PrimeFaces Tutorial: 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 PrimeFaces Tutorial: 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-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"JSF PrimeFaces Tutorial: Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi","og_description":"JSF PrimeFaces Tutorial: Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi JavaServer Faces (JSF), Java tabanl\u0131 web uygulamalar\u0131 geli\u015ftirmek i\u00e7in st","og_url":"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-18T03:41:47+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"9 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"JSF PrimeFaces Tutorial: Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi","datePublished":"2025-11-18T03:41:47+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/"},"wordCount":1386,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/","name":"JSF PrimeFaces Tutorial: Modern Web Uygulamalar\u0131 Geli\u015ftirme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-18T03:41:47+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/jsf-primefaces-tutorial-modern-web-uygulamalari-gelistirme-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JSF PrimeFaces Tutorial: 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\/34524","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=34524"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34524\/revisions"}],"predecessor-version":[{"id":34525,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34524\/revisions\/34525"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}