HACETTEPE ÜNĠVERSĠTESĠ BĠLGĠSAYAR MÜHENDĠSLĠĞĠ BÖLÜMÜ BĠL447 YAZILIM MÜHENDĠSLĠĞĠ LABORATUVARI MAKALE



Benzer belgeler
AJAX nedir? AJAX nasıl çalışır? AJAX. Tahir Emre KALAYCI. Sunucu Yazılım Teknolojileri

Java EE 5 Teknolojileri Jboss Seam

Java Programlama Giriş

Basit bir web uygulaması

Java EE web uygulamaları geliştirmek için kullanılan açık kaynak web uygulama framework üdür.

Client Server Database

Üst Düzey Programlama

JBoss Seam Next Generation Integration Framework

Google Web Toolkit ile Öğretim Elemanı Otomasyon Sistemi

Öğr. Gör. Serkan AKSU 1

ÖZGÜR YAZILIMLAR İLE J2EE

2.Eclipse açıldıktan sonra Workspace alanı seçilmesi gerekir. Workspace alanı projelerinizin fiziksel olarak bulunduğu kısımdır.

JavaServerFaces. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4

BİH 605 Bilgi Teknolojisi Bahar Dönemi 2015

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

MyFaces Özgür JSF Uyarlaması. Bora Güngören Portakal Teknoloji

Özgür Yazılımlarla Web Programlama. Özlem Özgöbek

JBoss Seam. Melih Sakarya

Bütün XML dökümanlarının bir kök elemanı olmalıdır. Diğer bütün elemanlar kök elemanı tarafından kapsanır.

Mobil Cihazlardan Web Servis Sunumu

Sade ve tam ekran masaüstü kullanımının temel çıkış noktası, aranılan özelliğe çabuk erişimi sağlayan yenilikçi kullanıcı deneyimidir.

Tomcat Uygulama Sunucusunun Kurulumu. İlk olarak adresine gidiyoruz.

Ders Tanıtım Sunumu. Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı. 26 Şub Öğr. Gör.

MOBİL UYGULAMA GELİŞTİRME

XAML Dili Microsoft Blend. Tasarım ve Kodlamanın. Birbirinden Ayrılması

BEUN VPN Hizmeti. VPN Nedir?

solid; BORDER-LEFT: #1F9FFF 0px solid; BORDER-RIGHT: #1F9FFF 0px solid; BORDER-TOP: #1F9FFF 0px solid; COLOR: #1F9FFF; FONT-FAMILY: Trebuschet MS;

Android e Giriş. Öğr.Gör. Utku SOBUTAY

PHP 1. Hafta 1. Sunum

Üst Düzey Programlama

HTML isteklerini anlayarak HTML sonucu üreten ve yaygın olarak kullanılan temel Servlet sınıfı HttpServlet tir.

jquery kütüphanesini sayfaya eklemek için iki yöntem vardır. 1. Direkt jquery nin sitesinden ekleme

08220 Internet Programcılığı II

Checkpoint SSL-VPN Kurulum Prosedürü. Checkpoint Endpoint VPN Client

Algorithm of Your Life. AJAX ve...

Internet Programming II

ASP.NET ile Bir Web Sitesi Oluşturma

VitalSource Bookshelf Nedir? Bookshelf e Giriş Kayıt Kitap Ekleme. Masaüstü ve Dizüstü Bilgisayarda

JasperReports Server ve Ireport raporlama Sistemi Kurulumu / Kullanımı 1. Bölüm 2. Bölüm 1- JasperReports Server ve Ireport Nedir?

Swing ve JDBC ile Database Erişimi

Html temelleri. Ders 4

PROGRAMLAMA DERSİ 1. İNTERNET

Üst Düzey Programlama

Programlama Yazılımı ile Web Sitesi Oluşturma

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 4 MasterPage

Kaynak Kodlardan Derleme. Turquaz Muhasebe. Versiyon 0.2. Hüseyin Ergün. 26 Mart 2005

Üst Düzey Programlama

Outlook ta Mail Arama

CELAL BAYAR ÜNİVERSİTESİ KÜTÜPHANE VERİTABANLARINA ÜNİVERSİTE DIŞINDAN ERİŞİM

JSF Melih Sakarya. Java Server Faces Facelet

İnternet Programcılığı

JAVA RMI ve Hibernate teknolojileri kullanılarak çok amaçlı bir yazılım altyapısı hazırlanması

U y g u l a m a A i l e s i (Abakus 360, T-Panel, T-CRM) Tarayıcı Ayarları. IPera İletişim Teknolojileri

Sunucu Taraflı JavaScript ile Gerçek Zamanlı Web Uygulamaları Geliştirme

Basit Mimari, Katmanlı Mimari ve doğrudan çalıştırma olarak üçe ayrılır.

Arayüz Geliştirme Dokümantasyonu

Kets DocPlace LOGO Entegrasyonu

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 5 Veri Tabanı İşlemleri

2-Hafta Temel İşlemler

Data Structures Lab Güz

2014 PROGRAMININ AUTODESK SİTESİNDEN İNDİRİLMESİ

Java Programlamaya Giriş

Web Uygulamaları Mimarileri ve Güvenliği

1.PROGRAMLAMAYA GİRİŞ

Python Web 2.0 Python ve Web 2.0 Son. Python ve Web 2.0. Gökmen GÖKSEL, 3 Mayıs 2007

Hızlı Başlangıç Kılavuzu

Web 2.0 Örnek Eğitim Notu

Boğaziçi Üniversitesi Bilgi İşlem Merkezi. Web Yönetimi Birimi. Drupal Kullanım Kılavuzu

Google Chrome Kullanıyorsanız; Microsoft Internet Explorer Kullanıyorsanız;

WEB FORMLARI. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu

Sisteme giriş yapıldığında ana sayfa üzerinde işlem menüleri, Hızlı erişim butonları ve mail gönderim istatistikleri yer alır.

KANTAR UYGULAMASI Kurulum Kılavuzu

ĐSTEMCĐ SUNUCU SĐSTEMLER DERSĐ FĐNAL ÇALIŞMASI SORULAR YANITLAR

ELEKTRONİK BELGE YÖNETİM SİSTEMİ KULLANICI GİRİŞ VE E-İMZA İŞLEMLERİ KLAVUZU

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011

Javascript Geliştiricileri İçin Xaml Ve Microsoft Silverlight

MOBİL UYGULAMA GELİŞTİRME

MUĞLA SITKI KOÇMAN ÜNİVERSİTESİ MUWİS. Web İçerik Sistemi. Bilgi İşlem Daire Başkanlığı-WEB GRUBU

MIRACLE DATA WORKS KURULUM DOKÜMANI

Android Ders Notları

İŞLEM COĞRAFİ BİLGİ SİSTEMLERİ MÜHENDİSLİK VE EĞİTİM LTD. ŞTİ. ArcGIS 10.1 Desktop Ücretsiz Deneme Lisanslaması

SQL Server 2008 kurulum için Microsoft Windows Installer 4.5 ve üzeri bileşenin bilgisayarınızda kurulu olması gerekir. İndirmek için tıklayın

4.41. WEB DE GENÇ TEKNİK: AJAX. Fırat Üniversitesi Fen Bilimler Enstitüsü, Elazığ. Fırat Üniversitesi Teknik Eğitim Fakültesi,

testo Saveris Web Access Yazılım Kullanım kılavuzu

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

JavaServer Faces (JSF) Sunucu Yazılım Teknolojileri 2008

MASTER PAGE SAYFASI KULLANIMI

CSS3, HTML 5 ve jquery ile Web Tasarımı. Umuthan Uyan

Bİ L 131 Hafta 2. 1) Bilgisayara Java SE Development Kit 7 kurulması

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 10. Yrd.Doç.Dr.Hacer Karacan

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

OMNET Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları. GYTE - Bilgisayar Mühendisliği Bölümü

Yeni kullanıcı hesabı açmak ya da varolan hesaplar üzerinde düzenlemeler yapmak.

ORM & Hibernate. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4 ahmetdemirelli@sabanciuniv.edu

WAMP SERVER KURULUMU

ORT3167 İnternet Programcılığı 1 Ders1-2. Öğr. Grv. Aybike ŞİMŞEK

ARCHICAD in EĞİTİM SÜRÜMÜ İÇİN BAŞVURU YAPILMASI

ASP.NET TEMELLERİ. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu

Sunum Planı. Django Nedir? Django projesi oluşturmak Basit bir blog uygulaması. Şablon Kullanımı Diğer özellikleri

MAC İşletim Sistemine Sahip Makineler İçin Elektronik İmza Kurulumu

Transkript:

HACETTEPE ÜNĠVERSĠTESĠ BĠLGĠSAYAR MÜHENDĠSLĠĞĠ BÖLÜMÜ BĠL447 YAZILIM MÜHENDĠSLĠĞĠ LABORATUVARI MAKALE AraĢtırma Konusu : ZK Öğrenci No : 20421876 Öğrencinin Adı : Serkan Öğrencinin Soyadı : Özal e-posta : serkanozal86@hotmail.com 1

1. Ġçindekiler 1. İÇİNDEKİLER...2 2. YAZAR HAKKINDA...4 3. ÖNSÖZ...5 4. AJAX...6 4.1. Ajax Nedir?...6 4.2. Ajax Neden Gerekli ve Ne İşe Yarar?...7 4.3. Ajax ın Mimarisi...8 5. ZK YA GİRİŞ...12 5.1. ZK Nedir?...12 5.2. ZK Neden Gerekli Görüldü?...15 5.3. ZK Ne İşe Yarar?...15 5.4. ZK Gerçekten İlgili Sorunları Çözdü mü?...15 5.5. Avantajları...16 6. ZK NIN MİMARİSİ...18 6.1. ZK nın Tasarımı...18 6.2. ZK nın Çalışma Mantığı...19 7. ZK YI DESTEKLEYENLER...22 7.1. Destekleyen Web Tarayıcılar ve Sunucular...22 7.2. Destekleyen Framework ler ve Teklonojiler...22 7.3. Destekleyen Araçlar...23 7.4. Destekleyen Programlama Dilleri...40 8. ZK YI KULLANANLAR...45 8.1. Kimler Kullanıyor?...45 8.2. Neden Kullanıyorlar?...46 8.3. Kullananlar ZK dan Memnun mu?...47 9. ZK KODLAMA...49 9.1. Pencere...49 9.2. Form...50 9.3. Üst Menü...51 9.4. Yan Menü...52 9.5. Hareketli Menü...53 10. SONUÇ...54 2

11. TUTORIAL...55 11.1. Örnek Uygulama - 1...55 11.1.a. Uygulama Ortamı 55 11.1.b. Uygulamanın Tanımı... 55 11.1.c. Uygulamanın Gerçekleştirimi... 56 11.2. Örnek Uygulama - 2...69 11.2.a. Uygulama Ortamı 69 11.2.b. Uygulamanın Tanımı... 69 11.2.c. Uygulamanın Gerçekleştirimi... 70 12. KAYNAKLAR...74 3

2. Yazar Hakkında 2.1. KiĢisel Bilgiler 15 Eylül 1986, Çankırı doğumluyum. İlköğretimi Kastamonu nun Ġnebolu ilçesinde, ortaöğretimi ise Kastamonu Mustafa Kaya Anadolu Lisesi nde yaptım. 2004 yılında Hacettepe Bilgisayar Bilimleri Mühendisliği Bölümü nü kazandım. 1 yıl hazırlık eğitimi aldıktan sonra 2005 yılında bölümüme başladım. Şu an 4. sınıftayım. 2.2. Teknik Bilgiler Başlangıç Düzeyi : Orta Düzey : İyi Düzey : Programlama Dilleri Araçlar 2.3. ĠletiĢim C C++ Java Assembly ShellScript ADA PHP SQL HTML DHTML CSS JavaScript XML ZUML JSP ANTLR JSTL Struts 1/2 Hibernate ZK OpenJPA serkanozal86@hotmail.com 4

3. Önsöz Bu makale Ajax ın yeni bir framework ü olan ZK yı tanıtmak, incelemek, değerlendirmek, küçük örneklerle pekiştirmek ve çok kapsamlı olmayan küçük bir proje ile bilgileri bütünleştirmek amacıyla yazılmıştır. Bu makale yazılırken 3.5.1. sürümü dikkate alınmıştır. ZK ; Tasarmının sağlam olması, Ajax gibi sağlam bir mimariyi temel alması, Java gibi güçlü, kolay ve etkin bir dil kullanması, Açık kaynak kodlu olması sayesinde kolay ve hızlı gelişen bir yapıdadır. Konunun daha rahat anlaşılması için konu bütünlüğü dikkate alınarak belirli konulara ayrılmış, konunun dağılmasını önlemek amacıyla her konu içinde fazlaca ayrıntıya girilmemiş, konu genel hatlarıyla anlatılıp gerekli yerlerde küçük örnekler verilmiştir. Anlaşıldığı üzere bu makale ZK için bir el kitabı şeklinde düşünülmemiştir. Ayrıntılı olarak öğrenmek için başka kaynaklara bakılmalıdır. Bunun için şu anda en iyi kaynak ZK nın resmi web sitesidir (www.zkoss.org). ZK ile uygulama geliştirmek için şu anda çeşitli geliştirme ortamları için (Eclipse, NetBeans IDE,..) için araçlar geliştirilmiştir ve geliştirilmeye devam etmektedir. Bu araçları kullanarak uygulamalar daha rahat bir şekilde gerçekleştirilebilir. Bu makelenin sizlere ZK yı iyi bir şekilde anlatıp öğretmesi dileğiyle 5

4. AJAX 4.1. AJAX Nedir? Ajax, web uygulamaları için yeni bir yaklaşımdır. Asynchronous JavaScript and XML'in kısaltması olan Ajax; bu yöntemi kullanan topluluklar tarafından verilmiş isimdir. Ajax: XHTML+CSS, XMLHTTPRequest, DOM (Document Object Model), JavaScript teknolojilerini kullanarak, klasik web uygulamalarına karşı bir alternatif olarak sunuluyor. Aslında ajax : bir dil kütüphane bir program veya bir geliştirme ortamı indirilebilir bir şey değildir. Ajax : bir yaklaşımdır. bir kısaltmadır. bir web teknolojileri ve standartları ortak kullanımıdır. etkileşimli zengin web arayüzleri oluşturulmasına imkan sağlar. web geliştirme tekniği ve konseptidir. * Fakat günümüzde AJAX tekniğinin uygulama içinde kullanımını kolaylaştıracak hatta yaygınlaştıracak çatılar (framework) ortaya çıkmıştır. Bunların tümünün sadece javascript kodu yazmayı gereksiz kılan javascript kodlarının yaptığı işleri arkaplanda JSP kodunun içine gömülmüş şekilde TAG kütüphaneleri ile gerçekleştirdiklerini bilmeliyiz. Bu makalenin amacı ise AJAX ı bir konsept olarak sunup ilkelerini herhangi bir çatı kullanmadan olduğu gibi anlatmaktır. Bu çerçevede ne makalenin içinde ne de makalenin sonunda verilen örnek uygulamada herhangi bir framework kullanılmamıştır. Çünkü bizce AJAX tekniğini kavrayabilmiş, javascript yazımını benimsemiş bir web programcısı için mevcut çatılardan kendisi için en uygun olanı seçmesi ve kullanması daha doğru bir yöntemdir. 6

4.2. AJAX Neden Gerekli ve Ne ĠĢe Yarar? Doğru kullanıldığı zaman sunucu (server) tabanlı teknolojilerden çok daha hızlı kullanıcının isteklerine cevap verebilen daha interaktif çözümler, bu yeni yaklaşım sayesinde üretilebilmektedir. Bunun yanında klasik web uygulamalarının sade kullanıcı arayüzü yerine daha canlı ve yetenekli arayüzlerin oluşturulmasını mümkün kılar. Bu özellikleri ile Ajax web uygulamalarında en çok şikayet konusu olan yavaşlık ve arayüzün çirkin ya da masaüstü uygulamaları ile karşılaştırılacak olursa "kullanışsız" olması sorununa iyi bir çözüm olmaktadır. 4.2.a. Ajax neden gerekli görüldü? Klasik web uygulamalarındaki kullanıcı ile uygulama arasındaki etkileşimi hatırlarsak: Kullanıcı web tarayıcısı aracılığıyla bir istekte bulunur, web uygulaması bu isteğe bir cevap (HTML) oluşturur. Bu esnada kullanıcı sayfanın yüklenmesini bekler. Ajax'da ise kullanıcı isteklerine daha kısa zamanda (neredeyse anında) cevap verilir. Sunucu (server) tabanlı web uygulamalarında sunucu (server) kullanıcı tarafından gönderilen isteklere her kullanıcı bir istek gönderdiğinde cevap vermek zorunda olduğundan, yazılımın cevap verme hızı, web sunucunun (server) hızıyla doğru orantılıydı. Web sunucunun (server) hızlı cevap veremediği zamanlarda da kullanıcının web uygulamalarından aldığı verim büyük oranlarda düşebiliyordu. İşte bu noktada giderilmesi gereken bir sorun vardı ve getirilen çözüm Ajax tı. 4.2.b. Ajax ne iģe yarar? AJAX kullanımında tarayıcıyla (browser) web sunucu (server) arasındaki veri alışverişi dramatik oranda azaltır ve aynı zamanda da web sunucunun (server) işlem gücü bu tür işlemler için kullanılmamış olur. Ajaxın bu ozelliği çok sık karşılaştığımız bir soruna çözüm olmaktadır. AJAX sayesinde kullanılan web uygulamalarında sunucuya (server) form gönderme ve cevap bekleme kısmı tamamen ortadan kaldırılmıştır. Yukarıda anlatılanları günlük hayattan bir örnek Google Maps'teki yakınlaştırma (zoom) özelliği(sayfa yeniden yükleme (reload) gerektirmiyor), Google Suggest'te siz klavyenizle birşeyler girdikçe sayfayı yenilemeden (refresh) yeni önerilerin size sunulması ve bunun gibi bir çok örnek... 7

4.3. AJAX ın Mimarisi? AJAX uygulamalarında temel çalışma mantığı ve işlem sırası aşağıdaki gibidir: Sayfada varolan işlemlerden biri tetiklenince, sayfada hazırda bekleyen javascript fonksiyonlarıyla xmlhttprequest nesnesi oluşturulur. Bu nesne arka planda gönderdiği bir http talebiyle, istenen işlem için sunucu tarafında bulunan ve sunucu tabanlı bir dille yazılmış ilgili dosyadan o işlemin yapılmasını talep eder ve bu dosyanın çıktısını alarak kullanıcı tarafında işlenmesi ve istenen şekilde sunulması için diğer bileşenlere aktarır. Bu işlem akışı sırasında, bir Ajax uygulamasını tetiklemek için HTML ve JS, XMLHTTPREQUEST nesnesini oluşturmak için JS, arkaplanda sunucuya asenkron (eşzamanlı olmayan/gerçek zamanlı) HTTP talebi göndermek için XMLHTTPREQUEST nesnesi, sunucu tarafında yapılması istenen işlem için PHP, ASP/.NET, JSP/JAVA vb. sunucu tabanlı bir dil, sunucu tarafında üretilen çıktıyı almak için gene XMLHTTPREQUEST nesnesi, elde edilen bu çıktıyı işlemek ve sayfada istenen alana yerleştirmek için DOM, DHTML ve JS, işlenmiş çıktının renk, çizgi vb. şekilsel sunumu için de (X)HTML ve CSS kullanılmaktadır. ġekil 1: AJAX da Response-Request İlişkisi 8

ġekil 2: AJAX da Client-Server ilişkisi 9

ġekil 3: Geleneksel web uygulamaları ile AJAX yaklaşımının karşılaştırılması 10

ġekil 4: Klasik web uygulamalarındaki senkron etkileşimle AJAX yaklaşımındaki asenkron etkileşim karşılaştırması 11

5. ZK ya GiriĢ 5.1. ZK Nedir? Günümüzde AJAX tekniğinin uygulama içinde kullanımını kolaylaştıracak hatta yaygınlaştıracak çatılar (framework) ortaya çıkmıştır. Bunların tümünün sadece JavaScript kodu yazmayı gereksiz kılan JavaScript kodlarının yaptığı işleri arkaplanda JSP kodunun içine gömülmüş şekilde TAG kütüphaneleri ile gerçekleştirmektedir. AJAX 'ın iki büyük örneği Google Map ve Google Suggest'tir. AJAX web uygulamalarını masaüstü uygulamaları gibi etkileşimin aynı seviyede olmasından kurtararak, web uygulamalarına rahat bir nefes aldırdı. Bununla birlikte Applet'ların ve Flash uygulamalarının tersine standart web tarayıcılar tarafından JavaScript gibi çalıştırılabilir ve ek bir araca veya eklentiye gerek duymaz. AJAX bir çeşit yeni nesil dinamik HTML(DHTML) çatısıdır. Bu yüzden kullanıcı tarafından tetiklenen ve görüntü üstünde işlemler olayları dinlemek konusunda JavaScript tabanlıdır. AJAX uygulamaları ve web sayfaları ZK çatısı ile kolayca birleştirebilir. Diğer AJAX çatılarının tersine, ZK ile web uygulamaları geliştirmek için JavaScript konusunda bilgi sahibi olmaya gerek yoktur. Çünkü ZK Engine, JavaScript kodunu otomatik olarak üretir. ZK ile web uygulaması geliştirmek için biraz HTML bilgisine ihtiyaç vardır. Basit bir şekilde web uygulaması geliştirmek için ZK geliştirme takımı aynı zamanda ZK User Interface Markup Language (ZUML) dilini tanımladı. Bu dil ile ZK uygulamaları HTML formatında olduğu gibi basit bir şekilde tag açıp kapatarak gerçekleştirilebilir. ZK web uygulamalarına zengin kullanıcı arayüzü sağlamak için olay ve bileşen tabanlı olarak tasarlanmıştır. ZK, AJAX'ın olay yönetim motorunu, zengin bir XML User Interface Language (XUL) kümesini, XHTML bileşenlerini ve aradaki gösterim tarzını kapatan ZK, User Interface Markup Language (ZUML)'yi içermektedir. ZK ile uygulamalar zengin özellikli XUL and XHTML bileşenleri içinde sunulabilir ve bu bileşenler kullanıcı tarafında tetiklenen olaylar ile işlenebilir. ZK zengin AJAX uygulamalarını aşağıdaki şekillerde basitleştirir: Olay yönetim motoru web uygulaması geliştirenlere masaüstü uygulaması geliştirmek gibi uygulama geliştirme imkanı sunmaktadır. XUL ve XHTML bileşenleri katmanlar arasındaki blokları kaldırarak web uygulamalarının zenginleşmesini sağlar. ZUML dili zengin kullanıcı arayüzlerinin basit HTML sayfaları gibi tasarlanıp gerçekleştirilmesini sağlar. 12

XHTML XHTML Extensible HyperText Markup Language in kısaltmasıdır. XHTML HTML e çok benzer. Kısaca XHTML XML sözdüzüminde yazılan HTML dir. Aşağıdaki noktalar en önemli farkları göstermektedir. Bir elemanın veya özelliğin gösterimi(küçük harf ve büyük harf duyarlılığı) HTML nin tersine XHTML de önemlidir. Örneğin içeriği olmayan elemanlar(örn. <br>) XHTML de mutlaka kapatılmalıdır(örn. <br />). Örnek kod: <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>a XHTML example</title> </head> <body> <h1>testpage</h1> <p>a paragraph</p> <p> Another <br /> Paragraph </p> </body> </html> 13

XUL XUL XML User Interface Markup Language in kısaltmasıdır. Bu dil ZK takımı tarafından bulunmuş bir dil değildir. Mozilla takımı tarafında tanımlanmış bir dildir. XUL nin proje sayfası http://www.mozilla.org/projects/xul/. Bu dil platformdan bağımsız olarak kullanıcı arayüzü tanımlamamızı sağlar. Bu yüzden ZK geliştiricileri bu dili kullandılar. Örnek kod: <?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <window id ="findfile-window" title ="Find Files" orient ="horizontal" xmlns ="http://www.mozilla.org/keymaster/gatekeeper /there.is.only.xul"> <button id="find-button" label="find"/> <button id="cancel-button" label="cancel"/> </window> ZUML ZUML ZK User Interface Markup Language in kısaltmasıdır. ZUML XUL tabanlıdır. Fakat ZUML de XUL standartlarıan bazı ekler yapılmıştır. Örneğin gömülü programlama gibi: <window title="hello" border="normal"> Hello World! </window> Kullanıcı için web uygulaması aynı masaüstü uygulamasıdır. Geliştirici için ise bağımsız bir uygulama programlama gibidir. ZK olay tabanlı çalışır ve istek ve cevapları web uygulamasından soyutlar. Teknik altyapı ZK tarafından sağlanmaktadır. Bu yüzden tarayıcı tarafı için JavaScript kodu yazmaya gerek yoktur. ZK framework u bazı JavaScript kütüphanelerini içerir ve kullanıcı için JavaScrip kodu üretir. Bu yüzden uygulama geliştiricilerin JavaScript ile ilgili bir şey bilmeye ihtiyacı yoktur. ZK framework sadece UI framework un yapması gereken şeyleri yapar. Yani tüm problemleri çözen bir framework henüz yoktur. Bu yüzden Persistance gibi işler başka framework ler ile yapılmadır. Bununla birlikte birçok framework ZK ya entegre edilebilir. (Örn. Hibernate, http://www.hibernate.org). 14

5.2. ZK Neden Gerekli Görüldü? Günümüzde Web uygulaması geliştirmek için bir sürü framework var. Fakat ZK onlardan neden farklıdır diye düşünürsek yanıt çok basittir. Çünkü diğer framework ler zengin kullanıcı arayüzü konusunda sınırlıdır, uygulama geliştirmek çok maliyetli ve karmaşıktır. 1994 yılında ZK yı geliştiren ekip tarafında zapp ve OWL den esinlenilerek Window için bir hesap(account) uygulaması için bir altyapı geliştirildi. 2000 yılında aynı ekip Struct ve WebWorks den esinlenerek J2EE ile Windows üstünde diğer bir hesap(account) uygulaması için bir altyapı geliştirildi. Her iki sistemin geliştirilmesini de incelediğimizde görebiliriz ki Web uygulaması geliştirmek sadece yüksek seviyede bir programlama bilgisi gerektirmekle kalmaz aynı zamanda yüksek bir maliyet gerektirir. Geriye dönüp 1990 lı yıllardaki masaüstü uygulamalarına başarısına baktığımızda bileşen ve olay tabanlı modelin önemli bir rol oynadığını görürüz. Aynı model ZK ile web uygulamalarına uygulandığında web uygulaması geliştirmedeki çıkan sorunlara çözüm bulunmuştur. ZK projesinin amaçları nelerdir? Masaüstü uygulamalarıyla aynı veya daha yüksek seviyede kullanıcı arayüzlü Web uygulaması geliştirmek. Masaüstü uygulamalarıyla aynı veya daha yüksek basitlikle web uygulaması geliştirmek. İyi bir mimari ve birlik ile işbirliğine teşvik etmek için. 5.3. ZK Ne ĠĢe Yarar? Masaüstü uygulamalarıyla aynı veya daha yüksek seviyede kullanıcı arayüzlü Web uygulaması geliştirmeye imkan sağlar. Masaüstü uygulamalarıyla aynı veya daha yüksek basitlikle web uygulaması geliştirmeye imkan sağlar. İyi bir mimari ve birlik ile işbirliğine teşvik eder. 5.4. ZK Gerçekten Ġlgili Sorunları Çözdü mü? Birçok ülkede birçok kuruluş tarafından kullanılıyor olması, ZK için sürekli yeni plug-in ve framework geliştirilmesi, ZK ile yapılan Web uygulamalarının gerçekten zengin kullanıcı arayüzü ile kullanıcılar tarafından ilgi görmesi, Yüksek düzeyde Web programlaması bilmeyenlerin bile ZK ile kolayca zengin kullanıcı arayüzlü Web uygulaması geliştirebilmesi, ZK nın gerçekten ilgili sorunları çözdüğünü gösterir. 15

5.5. Avantajları Zengin Kullanıcı Deneyimi Artık günümüzde web uygulaması geliştiren kişiler JavaScript ve HTML dillerine yabancı olmayan, AJAX konusunda bilgi ve deneyim sahibi olan, web uygulamaları ile Java arasındaki bağı anlamış kişilerden oluşmaktadır. ZK da bu kişileri hedef almıştır ve böylelikle kokay bir şekilde öğrenilip yaygınlık kazanmıştır. Direct RIA ZK yazılım geliştiricileri kullanıcı arayüzü, veri tabanı ve diğer kaynakların yönetimini programcıdan soyutlayarak desteklemektedir. Direct RIA ile programlama ile yazılım geliştiriciler sanki bir masaüstü uygulaması geliştiriyormuş gibi web uygulaması geliştirebilmektedirler. Açık Kaynak Olması (Open Source) ZK açık kaynak kodlu bir Ajax + Mobile framework üdür. ZK hakkında 20+ dilde çeviri, 100+ makale/blog, 100,000+ satır kod ve 190+ ülkeden 800,000+ indirme ile internet ortamında henüz yeni olmasına rağmen önemli bir yere sahiptir. Standards-based ZK temelde birçok standarda dayandığı için web programlama konusuna yabancı olmayanlar için öğrenmesi çok kolaydır. Ayrıca standart haline gelmiş birçok programlama dili (XUL, HTML, JSP, JSF, Portlet, Java EE, ) ve framework(struts, Hibernate, JSTL, ) ile uyumlu olduğu için öğrenilmesi ve geliştirilmesi kolaydır. Sözdizim Biçimi ve Betik Dilleri (Markup and Script Languages) ZK içinde diğer programlama dilleri kullanılabildiği gibi ZK kütüphanesi diğer programlama dillerinde de (Java, Ruby, ) kullanılarak masaüstü uygulaması geliştirir gibi uygulama geliştirilebilir. Ayrıca ZK Tag library diğer tagliblerde (JSTL, Struts) olduğu gibi birçok kolaylık sağlamaktadır. Ayrıca ZK HTML, XUL gibi web uygulaması için standart hale gelmiş dilleri de desteklemektedir. Direct Push ZK güvenilir ve sağlam bir Direct Push mekanizması ile Direct Push ile hızlı ve etkin yanıt veren, dinamik bir yapıya sahip olan web uygulamaları kolay bir şekilde minimum maliyetle gerçekleştirilebilir. 16

GeliĢtirilebilirlik ve Geleneksellik (Extensibility and Customizability) ZK nın standart, esnek, kolayca geliştirilmeye ve anlaşılmaya uygun bir mimarisi vardır. CSS, şablon tabanlı ve macro bileşenler ile görünüş ve davranış uygulamaya değiştirmeden kolayca değiştirilebilir. Pluggable UI (Kullanıcı arayüzü) motoru ile UI(Kullanıcı arayüzü) kullanıcıdan bağımsız olabilir ve bir veri tabanından veya başka bir kaynaktan yüklenebilir. Güvenlik (Security) ZK en baştan güvenlik ön planda tutularak tasarlanmıştır. ZK sunucuyu bağlanmak isteyen script lerden ve JavaScript/SQL virüslerinden korur. Ayrıca business logic ve business data kısmını internet üstünden koruma altına alır. Ölçeklenebilirlik, Kümeleme ve Hatalara KarĢı Dayanıklılık (Scalability, Clustering and Failover) ZK zengin arayüzü ve hatalara karşı karaklılığı ile yüksek bir ölçeklenebilirlik ve uygulanabilirlik sağlar. Eğer bir sunucuda ZK ile ilgili bir hata meydana gelirse(zk Loader veya ZK Engine ile ilgili), hata tespit edilir ve başka bir ZK bileşeni ile (ZK Loader veya ZK Engine) hata kullanıcıdan gizlenerek ve soyutlanarak işlemlere devam edilir. Ayrıca modern uygulama sunucuları ile de uyumlu şekilde çalışabilmektedir. Mobil EriĢim (Mobile Access) ZK yaklaşık 1 milyon mobil araç için Internet uygulamalarına erişimi minimum maliyetle olanaklı kılmıştır. ZK Java Mobile, Android ve çeşitli mobil tarayıcıları desteklemektedir. Destekleyen ġirketler ve KuruluĢlar (Enterprise Support) ZK nın teknik servisi geliştirme zamanını kurtarmak yüksek seviyede kullanıcı deneyimi, üretkenlik ve performans ile birçok kuruluşa erişmek ve bu kuruluşlar tarafından erişilebilmek için tasarlanmıştır. Neticesinde Sun Microsystems, Swiss Re, Unisys, MMC da kapsayan birçok önemli kuruluş ZK yı doğrudan desteklemektedir. 17

6.1. ZK nın Tasarımı 6. ZK nın Mimarisi ġekil 5: ZK nın mimarisi ZK nın 2 tip kullanıcısı vardır: Uygulama GeliĢtirici (Developer) : Basit programa bilgisi ve tecrübesiyle Web uygulaması geliştirebilir. Son Kullanıcı (End User) : Kullandığı Web uygulamaları çok zengin bir kullanıcı arayüzüne sahiptir ZK altyapı olarak AJAX ve Mobile teklonojilerini kullanır. Bu teklonojileri kullanırken Google Maps, Yahoo! UI, DOJO, ZK Spreadsheet, Web Services ve Versatile Plugins den yararlanır. 18

6.2. ZK nın ÇalıĢma Mantığı ZK'nın AJAX tabanlı mekanizması Şekil'de gösterilen 3 önemli kısım tarafından gerçekleştirilmektedir: ZK Loader, ZK AU (asynchronous update) Engine, ve ZK Client Engine. ZK Loader ve ZK AU Engine kısımları bir grup Java Servlet'ın bileşiminden oluşmaktadır. ZK Client ise JavaScript kodlarının birleşiminden oluşmaktadır. Şekil ZK Loader ilk kez istem aldığı zaman oluşan mekanizmayı göstermektedir. ġekil 6: ZK nın çalışma mantığı 19

Yukarıda gösterilen mekanizma şu şekilde çalışmaktadır: 1. ZK Loader gelen URL istemini yorumlar ve ilgili HTML sayfasını HTML, CSS, JavaScript kodlarını ve ilgili ZK bileşenlerini kullanarak üretir. 2. ZK Loader üretilen HTML sayfasını istemciye ve ZK Client Engine'a gönderir. ZK Client Engine ise tarayıcıdaki JavaScript olaylarını izleyip biriktirmek için istemci tarafına yerleştirilir. Not : ZK Client Engine olayları dinleyen ve ona göre web sayfasının içeriğini değiştiren birçok JavaScript'in birleşimidir. 3. Eğer herhangi bir JavaScript olayı tetiklenirse, ZK Client Engine tetiklenen olayı veya olayları sunucu tarafındaki ZK AU Engine'e gönderir. 4. ZK AU Engine Ajax istemlerini alır, ilgili ZK bileşenlerinin özelliklerini günler ve gereken cevabı istemci tarafına göndererek istemci tarafındaki bileşenleri günler. 5. ZK Client Engine sunucu tarafında gönderilen karşılıkları alır ve ilgili tarayıcının Document Object Model (DOM) ağacındaki ilgili içeriği günler. Bu işlem URL kullanıcı tarafından kullanılmayıncaya kadar devam eder. 20

A Presentation Layer (Sunum Katmanı) ZK tabaka olarak mümkün olduğunca ince tasarlanmıştır. Bu yüzden ZK sadece sunum katmanına odaklanmıştır. ZK çalışması için alt ve üst katmanlar açısından başka teklonojilere ihtiyaç duymamaktadır. Java Database Connectivity (JDBC), Hibernate, Java Mail, Enterprise Java Beans (EJBs) ve Java Message Service (JMS) uygulamaları ve araçları ZK ile uyumlu şekilde çalışabilmektedir. Bu sayede web uygulaması geliştiren kişiler bildikleri teklonojileri kullanarak ZK ile web uygulaması geliştirebilirler. A Server-centric Event-Driven Framework (Sunucu Merkezli Olay Yönetim Çatısı) Birçok Ajax çatısında sunucunun rolü pasiftir. Sunucu sadece istemciden istemleri aldıktan sonra gerekli veriyi sağlamak ve almaktan sorumludur. Bileşenler arasındaki oldukça karışıktır ve birçok JavaScript programına ihtiyaç duyar. Fakat ZK da durum tam tersidir. Tüm bileşenler sunucu tarafında yaratılır ki bu bileşenler arasındaki iletişimi kolaylaştırır ve kullanıcı sunucudaki bileşenlere doğrudan erişir. Bundan başka bileşenler arasındaki iletişimin bir diğer yolu da olay tabanlıdır. İstemci tarafında kullanıcı tarafından bir etkileşim tetiklenir ya da olaylar diğer bileşenlere yollanır. Sonuç olarak ZK sunucuları kullanıcılara masaüstü uygulaması geliştirir gibi web uygulaması geliştirme imkanı sağlar. Böylece kullanıcılar daha etkileşimli uygulamaları daha az sorumlulukla gerçekleştirebilirler. A Component-Based GUI Toolkit (BileĢen Tabanlı GUI Aracı) ZK bileşen tabanlı bir grafiksel kullanıcı arayüzü aracıdır. ZK 70 den fazla XUL tabanlı ve 80 den fazla XHTML tabanlı bileşenlerini ve kullanıcı arayüzü tasarımı için ZUML dilini destekler. Programcılar kendi uygulama sayfalarını XUL/XHTML bileşenlerinin zengin özellüklerini kullanarak tasarlarlar. Böylece uygulamanın son kullanıcı tarafında tetiklenen olayların üstünde yönetimini sağlar. Bu masaüstünde çalışan GUI tabanlı uygumalara benzer. 21

7. ZK yı Destekleyenler 7.1. Destekleyen Web Tarayıcılar ve Sunucular 7.1.a. Web Tarayıcılar Simge Tarayıcı Sürümle Internet Explorer 6+/7 Netscape 8+/9 Firefox 1+ Safari 2+ Mozilla 1+ Opera 9+ Camino 1+ 7.1.b. Web Sunucular Servlet 2.3+ ve JVM 1.4+ destekleyen Web sunucular 7.2. Destekleyen Framework ler ve Teklonojiler Simge Framework / Teklonoji MVC Performance Optimization Spring Webflow Spring Security JSF JSP Seam Data Binding Chart JasperReports JDBC Hibernate JPA Google Map 22

7.3. Destekleyen Araçlar 7.3.a. Eclipse Çevrimiçi Yükleme 1. Eclipse açılır ve [Help] menüsü altında select [Software Updates] > [Find and Install...] seçilir ġekil 7: Eclipse nin update seçeneğinin seçilmesi 23

2. [Search for new features to install] seçilir ve [Next] tıklanır. ġekil 8: Update için yeni özelliklerin (plug-in) aranması 24

3. Buradan [New Remote Site...] tıklanır. Karşımıza gelen pencerede name kısmına ZK Studio, URL kısmına http://studioupdate.zkoss.org/studio/update yazılararak [OK] butonuna tıklanır. ġekil 9: Yüklenecek özelliğin (plug-in) yerinin seçilmesi 25

Böylece eklenen update sitesi seçilir ve [Finish] butonuna basılır. ġekil 10: Yüklenecek özelliğin (plug-in) seçilmesi 26

4. Daha sonra ZK Studio için yükleme paketi seçilir ve [Next] butonuna tıklanır. ġekil 11: Seçilen özelliğin (plug-in) onaylanması 27

5. Bundan sonra karşımıza lisans onaylama kısmı çıkar. "I select the terms in the license agreement" seçilerek [Next] butonuna tıklanır. ġekil 12: Lisans anlaşmasının kabul edilmesi 28

6. [Finish] butonuna tıklayarak yükleme onaylanmış olur. ġekil 13: Yüklemenin başlatılması ġekil 14: Özelliğin (plug-in) yüklenmesi 29

Eğer yükleme sırasında veya sonrasında Verification penceresi çıkarsa, [Install All] butonuna basılarak devam edilir. ġekil 15: Yüklemenin doğrulanması 7. En sonnda karşımıza çıkan onay penceresinden [Yes] butonu basılarak Eclipse nin yeniden başlaması sağlanır ve yeni eklentimiz aktif duruma gelir. ġekil 16: Eclipse nin yeniden başlatılması 30

Çevrimdışı Yükleme 1. ZK Studio için yükleme paketi http://www.zkoss.org/download/zkstudio.dsp adresinden yüklenir. 2. Eclipse açılır ve [Help] menüsü altında select [Software Updates] > [Find and Install...] seçilir 3. [Search for new features to install] seçilir ve [Next] tıklanır. 4. Buradan [New Archived Site] butonu tıklanır. ġekil 17: Yüklenecek özellik (plug-in) için yer seçme istemi 31

5. Karşımıza çıkan pencereden indirdiğimiz yükleme paketi seçilir ve [Open] butonuna basılır. ġekil 18: Yüklenecek özelliğin (plug-in) seçilmesi Daha sonra [OK] butonuna basılarak yükleme paketi seçimi onaylanır. ġekil 19: Seçilen özelliğin (plug-in) yerinin onaylanması 32

6. Böylece eklenen paket seçilir ve [Finish] butonuna basılarak yükleme başlatılır. ġekil 20: Yüklemenin onaylanması 7. Geri kalan adımlar çevrim için yükleme kısmında olduğu gibi 4. Adımdan itibaren aynıdır. 33

7.3.b. Netbeans Gereksinimler 1. NetBeans 5.5+/6+. 2. ZK kütüpanesinin son sürümleri. 3. Bir uygulama sunucusu. Bu örnekte JBoss kullanılmıştır. Uygulanacak Adımlar 1. NetBeans IDE başlatılır. 2. Yeni bir proje açılır ([File] > [New Project]) ve Web Application kategorisi seçilir ([Web] > [Web Application]). ġekil 21: Proje için Web uygulaması türünün seçimi 34

3. Projenin ismi verilir (örneğin helloworld), projenin dizini ve uygulama sunucusu seçilir. En son olarak [Finish] butonuna basılır. ġekil 22: Proje isminin girilerek projenin oluşturulması 35

4. [Web Pages] > [WEB-INF] dizini altındaki web.xml dosyası açılır ve içeriği aşağıdakiler ile günlenir. ġekil 23.a / 23.b: web.xml dosyasının seçimi ve içeriği <?xml version="1.0" encoding="utf-8"?> <web-app Id ="WebApp_ID" version="2.4" Xmlns ="http://java.sun.com/xml/ns/j2ee" xmlns:xsi ="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > <display-name>helloworld</display-name> <servlet> <description> <![CDATA[The servlet loads the DSP pages.]]> </description> <servlet-name> dsploader </servlet-name> <servlet-class> org.zkoss.web.servlet.dsp.interpreterservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name> dsploader </servlet-name> <url-pattern> *.dsp </url-pattern> </servlet-mapping> <listener> <description> Used to cleanup when a session destroyed </description> <display-name> ZK Session Cleaner </display-name> <listener-class> org.zkoss.zk.ui.http.httpsessionlistener </listener-class> </listener> <servlet> <description> ZK loader for ZUML pages </description> <servlet-name> zkloader </servlet-name> <servlet-class> org.zkoss.zk.ui.http.dhtmllayoutservlet </servlet-class> <init-param> <param-name> update-uri </param-name> <param-value> /zkau </param-value> </init-param> <load-on-startup> 1 </load-on-startup> </servlet> <servlet-mapping> <servlet-name> zkloader </servlet-name> <url-pattern> *.zul </url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> zkloader </servlet-name> <url-pattern> *.zhtml </url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> auengine </servlet-name> <url-pattern> /zkau/* </url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file> index.htm </welcome-file> <welcome-file> index.jsp </welcome-file> <welcome-file> default.html </welcome-file> <welcome-file> default.htm </welcome-file> <welcome-file> default.jsp </welcome-file> </welcome-file-list> </web-app> 36

5. [Library] klasörüne sağ tuş ile basılır ve [Add JAR/Folder...] seçilir. ġekil 24: Gerekli kütüphanelerin eklenmesi ZK-X.X.X/dist/lib/ ve ZK-X.X.X/dist/lib/ext dizinleri altındaki tüm Jar dosyaları bu kütüphane içine eklenir. ġekil 25: ZK ile ilgili kütüphaneler 37

6. Artık ilk zul dosyamızı oluşturmak için gerekli tüm işlemleri yapmış bulunmaktayız. Web Pages dosyasına sağ tuş ile basılır ve [New] > [File/Folder] seçilir. ġekil 26: Projede yeni dosya oluşturulması [Other] > [Empty File] seçilir. ġekil 27: Boş bir dosya oluşturma istemi Dosya adına "helloworld.zul" verilir ve [Finish] butonuna basılır. 38

7. helloworld.zul dosyasına aşağıdakiler yazılır. 8. 9. <?xml version="1.0" encoding="utf-8"?> 10. <?page title="zk::hello World!"?> 11. <window title="my First window" border="normal" width="200px"> 12. Hello, World! 13. </window> ġekil 28: Helloworld uygulamasının içeriği 8. Artık projeyi çalıştırabiliriz. ġekil 29: Projenin çalıştırılması 39

7.4. Destekleyen Programlama Dilleri Script in Java <window id="win" title="script in Java" width="100%" border="normal"> <zscript language="java"> FCKeditor fck = new FCKeditor(); fck.setcustomconfigurationspath("/userguide/macros/fckconfig.js"); fck.setvalue("hello Java"); fck.setparent(win); fck.addeventlistener ( Events.ON_CHANGE, new EventListener() { public void onevent(event event) throws Exception { alert(((inputevent)event).getvalue()); } } ); </zscript> </window> ġekil 30: Java nın ZK da kullanım örneği ġekil 31: Java nın ZK da kullanımı ile yapılan uygulama 40

Script in Groovy <window id="win" title="script in Groovy" width="100%" border="normal"> <zscript language="groovy"> import org.zkforge.fckez.fckeditor; def hello = "Hello Groovy"; def fck = new FCKeditor(); fck.setcustomconfigurationspath("/userguide/macros/fckconfig.js"); fck.setvalue(hello); fck.setparent(win); </zscript> </window> ġekil 32: Groovy nin ZK da kullanım örneği ġekil 33: Groovy nin ZK da kullanımı ile yapılan uygulama 41

Script in Ruby <window id="win" title="script in Ruby" width="100%" border="normal"> <zscript language="ruby"> require 'java' include_class 'org.zkforge.fckez.fckeditor' def sayhello () return "Hello Ruby" end fck = FCKeditor.new() fck.setcustomconfigurationspath("/userguide/macros/fckconfig.js") fck.setvalue(sayhello()) fck.parent = $win </zscript> </window> ġekil 34: Ruby nin ZK da kullanım örneği ġekil 35: Ruby nin ZK da kullanımı ile yapılan uygulama 42

Script in JavaScript <window id="win" title="script in JavaScript" width="100%" border="normal"> <zscript language="javascript"> var fck = new org.zkforge.fckez.fckeditor(); fck.setcustomconfigurationspath("/userguide/macros/fckconfig.js"); fck.setparent(win); fck.setvalue(sayhello()); function sayhello() { return 'Hello JavaScript'; } </zscript> </window> ġekil 36: JavaScript in ZK da kullanım örneği ġekil 37: JavaScript in ZK da kullanımı ile yapılan uygulama 43

Script in Python <window id="win" title="script in Python" width="100%" border="normal"> <zscript language="python"> from org.zkforge.fckez import FCKeditor def sayhello(): return "Hello Python" fck = FCKeditor() fck.customconfigurationspath = "/userguide/macros/fckconfig.js" fck.value = sayhello() fck.parent = win </zscript> </window> ġekil 38: Python un ZK da kullanım örneği ġekil 39: Python un ZK da kullanımı ile yapılan uygulama 44

8.1. Kimler Kullanıyor? 8. ZK yı Kullananlar University of Oxford University of Vermont The University of Manchester Intellectual Property Limited (UMIP) The United States Army Research Institute of Environmental Medicine Institute for Information Industry National Health Research Institutes Sun Microsystems, Inc. Alcatel-Lucent Bank's soft systems The Turkish Statistical Institute The Ministry of Public Works and Settlement EN-UYGUN.COM ġekil 40: ZK yı kullanan kuruluşlar Ve daha birçok üniversite, kamu kuruluşu, özel kuruluş, şirket, 45

8.2. Neden Kullanıyor? ZK yı kullanan üniversiteler, şirketler, kamu veya özel kuruluşlar doğal olarak ihtiyaçları doğrultusunda ZK nın kendilerine faydalı olabileceğini düşündükleri için kullanmaya başlamışlardır. ZK dan elde ettikleri fayda ZK nın getirdiği avantajlarla gelmektedir. Dolayısıyla bu avantajlar ZK yı kullanan kuruluşların ihtiyaçlarına piyasadaki diğer framework ve araçlardan daha iyi cevap vermektedir. ZK yı piyasadaki diğer framework ve araçlardan üstün kılan özellikleri : Masaüstü uygulaması geliştiriyor gibi web uygulaması gerçekleştirilebilir. Zengin kullanıcı arayüz desteği sağlaması ve bunları sağlarken uygulama geliştiriciyi birçok zorluklardan soyutlayarak uygulama geliştiriciye hazır birimler sağlar. JavaScript tabanlıdır. XML, XHTML, gibi standart web dillerini destekler ve kendi dili olan ZUML in bu diller temel alınarak geliştirilmiştir. İstemci tarafında çalışması için ek bir araç veya uygulamaya ihtiyaç duymayıp işlemlerin ve olayların ele alınması sunucu tarafında yapılması sebebiyle istemci tarafında sadece görüntüleme kısmı yapılmaktadır. Sunucu tarafında çalışması için ek bir araç veya uygulamaya ihtiyaç duymayıp sadece gerekli ayarlamaların yapılmasının ve gerekli kütüphanelerin tanıtılmasının yeterlidir. Açık kaynaktır. Ücretsizdir. Web kütüphanesi olmakla birlikte masaüstü uygulamalarında da kütüphane olarak kullanılabilir. Birçok programlama ve script dilini desteklemekte ve bu diller tarafından desteklenmektedir. Dolayısıyla kuruluşlar müşterilerine, üyelerine veya ziyaretçilerine Daha güzel, zengin ve etkin bir arayüz sunmak, Web uygulaması geliştirmek için gereken işgücü ve zaman maliyetini azaltmak, Kullanım hakkı için gereken hukuki ve maddi sorumlulukları çok aza indirmek, Var olan sistemlerini en az maliyet ve müdahaleyle daha yeni ve etkin bir sisteme çevirmek için ZK yı kullanmaktadırlar. 46

8.3. Kullananlar ZK dan Memnun mu? Zaman zaman SourceForge.net de aktif olan projelere bakarım. Şimdiye kadar FileZilla ve GAIM gibi birçok değerli projeye rastlamıştım. Son zamanlarda ise bunlara ZK eklendi. Guy Bowerman, Senior Software Engineer of IBM Son yıllarda geliştirilen birçok AJAX framework ile deneyimim oldu. ZK da bu deneyimlerinde biri ve pazarlama çizgisini "Basit and Zengin" anlayışıyla üst seviyelere çekti. Max Kiesler, Strategic Desinger, co-founder and principle of Ideacodes Herşeyden önce bu framework bize programlama konusunda eğlence ve neşe getirdi. UML makes ekleme, günleme, silme, vb. gibi birçok işi kolaylaştırıyor. ZUML programcı olmayanlar için gerçekten çok ideal. ZUML ile bir kullanıcı arayüzünü diğeriyle birleştirebilir veya değiştirebilirsiniz. Sürükle-bırak, eşzamanlı olmayan günleme, vb. gibi özellikleri ve bileşenleri programcı olmayanların bile karışık kullanıcı arayüzlerini kolayca gerçekleştirebilmelerini sağlıyor. Dietrich Kappe, Chief Technology Officer of Pathfinder ZK nın web sitesi ZK ile ilgili gerçekten çok harika dökümanlar sunuyor. En az maliyet ve çalışmayla iyi bir AJAX uygulaması geliştirmek için gerekli bilgi ve deneyimi oradaki dökümanlarda bulabilirsin. Michael Klaene, Senior Consultant of Sogeti LLC Gerçekten çok basit bir AJAX framework ü. Sadece temel HTML bilgisine ihtiyaç duyuyor. Cagdas, StumbleUpon ZK Java için bildiğim en iyi XUL aracıdır. Sunucu tarafında AJAX ın yetenekleri ile DHTML hizmeti sunan çok güçlü bir framework dür. Chanwit Kaewkasi, CK's Blog JAVA uygulaması geliştirenler için çok ilginç bir projedir. ZK gelişmiş AJAX uygulamaları geliştirmek için çok yardımcı olabilir ve benim düşünceme göre XUL nin kullanılması ZK yı daha güçlü bir hale getiriyor. Hatem, Ajax Magazine ZK çok esnek gibi görünüyor ve XUL gibi birçok ilginç teklonojiye dayanıyor. İnanıyorum ki GWT ve ZK birlikte çok başarılı olabilirler. Carlos, Carlos' Binary Stuff 47

Bizim şirketteki yazılım geliştirme takımındaki üretkenliği arttırmanın bir yolunu bulmak için birçok farklı framework denedim. Gerçek şu ki ZK harika bir çalışma aracı olduğunu ve yazılım geliştirme için programcıya ilham verdiğini ispatladı. Bence sizde de ZK ile bir uygulama geliştirme potansiyeli var. İnanıyorum ki ZK ile tek limit gökyüzüdür. Chris Spiliotopoulos, creator of Zero Kode, Software Architect in Athens, Greece Tebrikler ürününüz harika... Birçok seçeneği değerlendirdikten sonra, birçom uygulamayı ZK ile geliştirmeye karar verdik. Gabriel Buades Rubio, Direcció General de Tecnologia i Comunicacions, Govern de les Illes Balears ZK çok ilginç. Son zamanlarda tam onun gibi bir şey arıyordum. ZK yı JSF, Spring ve Hibernate kullanarak yeni projeme eklemeyi düşünüyorum. Fernando de Leon, Sr. Software Web Developer in Queensland, Australia Size teşekkür etmek istiyorum çocuklar. ZK Java da gerçekten karmaşık uygulama geliştirmeyi çok basitleştiren ilk framework. Frans van Gool Son birkaç hafta içinde, bir grup güvenlik uzmanı benim ZK uygulamamı test etti. Söylediklerine göre benim uygulamam şirketteki en güvenilir uygulama imiş. Çok tebrik ediyorum. Harika bir iş çıkarmışsınız. Tommaso Fin, InfoCert Gerçekten ZK dan çok etkilendik, bu yüzden bizim form framework lerimizin sunum katmanınındaki kullanıcı arayüzü kodlarını ZK kodları ile değiştirerek bu katmanı ZK ile gerçekleştirmeye başladık. John Spackers Harika bir konu!!, Harika bir programlama ürünü!!... Benim açımdan pazarmalama bakımından en iyi AJAX framework ü. Bu şekilde devam edin!!! Rainer-Micahel Werner, IT Consultant in Germany Öncelikle çok ilginç bir framework! Harika bir iş! ZK yı tagler olmadan doğrudan masaüstü uygulaması geliştiriyor gibi kullandım ve daha önce Swing kullanarak yaptıklarıma benziyor. Eduard, Belgium 48

9. ZK Kodlama 9.1. Pencere ZK da pencere tanımlanması <window> </window> tagleri ile tanımlanır. Window tag i içinde tanımlı birçok değişken vardır. Bunlardan en önemlileri: <window title="my First Window" border="normal" width="200px"> Hello, World! </window> ġekil 41: ZK da pencere oluşturma için örnek kod ġekil 42: ZK dan oluşturulan örnek pencere id : Pencerenin isimdir. Bu isim sayesinde pencere tanımı dışından pencereye ulaşılabilir. title : Pencerenin başlığıdır. Pencerenin üst kısmında yazı olarak görünür. border : Pencere dışında çerçeve olup olmaması, varsa biçimi ile ilgilidir. width : Pencerenin genişliğidir. Pixel olarak (100px, 200px, ) veya geçerli sayfanın boyutuna göre oran (100%, 50%, ) olarak tanımlanabilir. height : Pencerenin yüksekliğidir. Pixel olarak (100px, 200px, ) veya geçerli sayfanın boyutuna göre oran (100%, 50%, ) olarak tanımlanabilir. left : Pencerenin geçerli sayfanın sol tarafından uzaklığıdır. Pixel olarak (100px, 200px, ) veya geçerli sayfanın boyutuna göre oran (100%, 50%, ) olarak tanımlanabilir. right : Pencerenin geçerli sayfanın sağ tarafından uzaklığıdır. Pixel olarak (100px, 200px, ) veya geçerli sayfanın boyutuna göre oran (100%, 50%, ) olarak tanımlanabilir. top : Pencerenin geçerli sayfanın üst tarafından uzaklığıdır. Pixel olarak (100px, 200px, ) veya geçerli sayfanın boyutuna göre oran (100%, 50%, ) olarak tanımlanabilir. style : Pencerenin biçimlendirilmesinde kullanılacak CSS dosyasının veya tanımının belirtilmesi için kullanılır. 49

9.2. Form <grid fixedlayout="true"> <columns> <column label="type" width="150px" /><column label="content" /> </columns> <rows> <row> <label value="kullanıcı Adı" width="150px" /> <textbox value="serkan" width="150px" /> </row> <row> Şifre: <textbox type="password" width="150px" /> </row> <row> Doğum Tarihi: <vbox><datebox width="150px" /></vbox></row> <row> E-mail: <textbox width="150px" value="serkanozal@gmail.com" constraint="/.+@.+\.[a-z]+/: Geçerli bir mail adresi giriniz" /> </row> <row> Doğrulama <hbox> <vbox> <textbox value="qwasdf" width="150px" /> <captcha id="cpa" length="6" width="150px" height="50px" /> </vbox> <vbox> <button onclick="cpa.randomvalue(); val.value=cpa.value;" /> </vbox> </hbox> </row> </rows> </grid> ġekil 43: ZK da form oluşturma için örnek kod ġekil 44: ZK da oluşturulan örnek form 50

9.3. Üst Menu <zk> </zk> <menubar id="menubar" width="200px"> <menu label="project" src="/img/briefcase-16x16.png"> <menupopup> <menuitem src="/img/briefcasespark-16x16.png" label="new"onclick="alert(self.label)"/> <menuitem src="/img/briefcaseopen-16x16.png" label="open" onclick="alert(self.label)"/> <menuitem src="/img/disketteblack-16x16.png" label="save" onclick="alert(self.label)" /> <menuseparator /> <menuitem src="/img/dooropen-16x16.png" label="exit" onclick="alert(self.label)"/> </menupopup> </menu> <menu label="help" src="/img/questionmarkbutton-16x16.png"> <menupopup> <menuitem label="index" onclick="alert(self.label)" /> <menu label="about"> <menupopup> <menuitem label="about ZK" onclick="alert(self.label)" /> <menuitem label="about Potix" onclick="alert(self.label)" /> </menupopup> </menu> </menupopup> </menu> <menu src="/img/spyglass-16x16.png"> <menupopup><menuitem label="index" /></menupopup> </menu> </menubar> ġekil 45: ZK da üst menü oluşturma için örnek kod ġekil 46: ZK da oluşturulan örnek üst menü 51

9.4. Yan Menü <z:window title="otel Yöneticisi Paneli" border="normal"> <z:tabbox height="25%" width="100%" mold="accordion"> <z:tabs> <z:tab label="üyelik Bilgileri" /> <z:tab label="otel-oda İşlemleri" /> </z:tabs> <z:tabpanels> <z:tabpanel height="10%" > <z:vbox> <z:toolbarbutton label="üyelik Bilgilerim"/> <z:toolbarbutton label="üyelik Bilgilerimi Güncelle"/> <z:toolbarbutton label="oturumu Kapat"/> </z:vbox> </z:tabpanel> <z:tabpanel height="10%" > <z:vbox> <z:toolbarbutton label="odaları Göster"/> <z:toolbarbutton label="oda Ekle"/> <z:toolbarbutton label="otel Bilgileri Göster"/> <z:toolbarbutton label="otel Bilgileri Güncelle"/> </z:vbox> </z:tabpanel> </z:tabpanels> </z:tabbox> </z:window> ġekil 47: ZK da yan menü oluşturma için örnek kod ġekil 48: ZK da oluşturulan örnek yan menü 52

9.5. Hareketli Menu <zk> <div height="450px"> <fisheyebar id="fsb" style="position:absolute;margin:80px 150px;" attachedge="top" itemwidth="80" itemheight="80" itemmaxheight="160" itemmaxwidth="160" > <fisheye image="/img /FolderABlue-128x128.png" label="folder" onclick="alert(self.label)" /> <fisheye image="/img /ReadingGlass-128x128.png" label="reading Glasses" onclick="alert(self.label)" /> <fisheye image="/img /Briefcase-128x128.png" label="project" onclick="alert(self.label)" /> <fisheye image="/img /MailboxFlag-128x128.png" label="email" onclick="alert(self.label)" /> <fisheye image="/img /Globe-128x128.png" label="globe" onclick="alert(self.label)" /> <fisheye image="/img /Spyglass-128x128.png" label="spyglass" onclick="alert(self.label)" /> </fisheyebar> </div> </zk> ġekil 49: ZK da hareketli menü oluşturma için örnek kod ġekil 50: ZK da oluşturulan örnek hareketli menü 53

10. Sonuç CSS, JavaScript ve DOM bilgisine ihtiyaç duyan diğer Ajax çatılarının tersine ZK diğer teklonojileri öğrenmeden kolaylıkla Ajax tabanlı web uygulaması geliştirmenizi sağlar. Bunun için gerekli olan ZUML dili sadece biraz HTML bilgisine ihtiyaç duyar. ZK Engine geri kalan kısmı HTML, CSS ve JavaScript kodu üreterek ele alır ve yönetir. Ek olarak ZK web uygulamalarını masaüstü uygulamaları gibi geliştirmeye imkan sağlar. Çünkü tüm bileşenler sunucu tarafında yaratılıyor. Diğer bir deyişle istemci ve sunucu arasındaki bileşenler simetriktir. Ne zaman sunucuda çalışan bileşenler değişse sunucu tarafındaki tarayıcıda olan bileşenler de ZK Engine tarafından otomatik olarak günlenir. Bundan başka kullanıcı arayüzü bileşenlerinin davranışı kullanıcı işlemleri tarafından tetiklenir veya olaylar diğer bileşenlere gönderilip onlardan alınır. Bu sayade web uygulamaları daha anlaşılır hale gelir. 54

11. Tutorial 11.1. Örnek Uygulama - 1 11.1.a. Uygulama ortamı Uygulamayı denemek için, Eclipse 3.4 (Ganymede), Apache Tomcat 6.0, Java 1.5+ / J2EE sisteminizde kurulu olmalıdır. Aslında örnek oldukça sade bir örnek olduğu için temelde elinizde herhangi bir JDK ve herhangi bir servlet container olması da yeterlidir. Ancak bundan sonraki anlatımlar Eclipse 3.4 ve Tomcat in kurulu olduğu varsayılacaktır. 11.1.b. Uygulamanın Tanımı Aşağıdaki uygulama herhangi bir dinamik web sayfasında ana sayfanın tasarımı için şablon niteliğindedir. Genelde anasayfalarda istenen sol tarafta bir üye giriş ekranı, üye giriş yaptıktan sonra o üyeye özgü bir menü, üst tarafta genel bir menü, orta kısımda ise işlem yapılmak üzere kullanıcıya sunulan sayfa gösterilecektir. Sayfalar arası geçiş esnasında yan taraftaki ve üst taraftaki menüler sabit kalıp sadece işlem yapılacak sayfalar değişecektir. Sayfanın sağ veya alt kısımlarına da benzer şekillerde başka menüler veya linkler eklenebilir. Sayfanın işleyişi şu şekildedir: 1. Kullanıcı sol taraftaki üye giriş panelinden kullanıcı adını, şifresini girerek sisteme giriş yapar. 2. Sisteme giriş yaptıktan sonra üye giriş menüsü kaybolup yerine kullanıcıya özgü bir menü gelir. 3. Kullanıcı kendine özgü menüdeki seçeneklerden işlem yapmak istediğini seçer. 4. Seçilen işleme uygun sayfa orta kısımda menülerden kalan yerde gösterilir. 5. Kullanıcı işlemini bu sayfa üstünden yapar. 55

11.1.c. Uygulamanın GerçekleĢtirimi <%@ page language="java" contenttype="text/html; charset=iso-8859-9" pageencoding="iso-8859-9" %> <%@ taglib uri="http://www.zkoss.org/tld/zul/jsp" prefix="zk"%> <jsp:usebean id="usernamekeeper" scope="session" class="java.lang.string" /> <jsp:scriptlet> session.setattribute( "Username", usernamekeeper ); </jsp:scriptlet> <html xmlns:z="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd" > <head> <title>oturum Aç</title> </head> <body> <z:window width="100%" id="mainwindow" border="none" title=" Otel Rezervasyon Otomasyonu - OTROT" > <z:iframe style="position:absolute; left:24%; top:135px; height:100%; width:76%;" id="mainpanel" /> <z:window id="loginpanel" title=" Oturum Aç" border="normal" style="width:23%;" > 56

<form> <center> <z:captcha id="cpa" length="5" style="width:50%; height:100%;" /> <br/> <z:button label="yeniden Oluştur" width="100px" onclick="cpa.randomvalue();" /> </center> <z:separator bar="true"/> <table> <tr> <td> <z:label value="güvenlik Kodu"/> </td> <td> <z:textbox id="securitycode" cols = "10"/> </td> </tr> <tr> <td> <z:label value="kullanıcı Adı"/> </td> <td> <z:textbox constraint="/[a-za-z0-9]{2,10}/: Hata" id="username" name="username" cols="10" /> </td> 57

</tr> <tr> <td> <z:label value="şifre"/> </td> <td> <z:textbox constraint="/[a-za-z0-9]{2,10}/: Hata" id="password" cols = "10" /> </td> </tr> <tr> <td> <z:button id="loginbutton" label="oturum Aç"/> </td> </tr> </table> </form> <z:separator bar="true"/> <center> <br/> <z:button label="taşınabilir" width="100px" onclick="loginpanel.dooverlapped();" /> <z:button label="sabit" width="100px" onclick="loginpanel.doembedded();" /> </center> <z:caption image = "/Images/Login.jpg" /> 58

<zscript> import BusinessLogic.MemberService; import Action.LoginAction; import Form.LoginForm; private class LoginClickEventListener implements EventListener { public void onevent( Event event ) throws UiException { LoginAction loginaction = new LoginAction( ); LoginForm loginform = new LoginForm ( username.value, password.value, securitycode.value, cpa.value ); String panel = loginaction.execute( loginform ); usernamekeeper = username.value; loginpanel.visible memberpanel.visible = false; = false; } } session.setattribute( "Username", usernamekeeper ); if( panel.equals( "Member" ) ) memberpanel.visible = true; else loginpanel.visible = true; loginbutton.addeventlistener ( "onclick", new LoginClickEventListener( ) ); </zscript> </z:window> 59

<z:window id="memberpanel" title="üye Kullanıcı Paneli" style="position:absolute; width:200px;" border="normal" visible="false" > <z:tabbox height="25%" width="100%" mold="accordion"> <z:tabs> <z:tab selected="false" label="üyelik Bilgileri" /> <z:tab selected="false" label="rezervasyon" /> </z:tabs> <z:tabpanels> <z:tabpanel height="10%" > <z:vbox> <z:toolbarbutton label="üyelik Bilgilerim"> <attribute name="onclick"> { mainpanel.src = "ShowMember.jsp"; } </attribute> </z:toolbarbutton> <z:toolbarbutton label="üyelik Bilgilerimi Güncelle"> <attribute name="onclick"> { mainpanel.src = "UpdateMember.jsp"; } </attribute> </z:toolbarbutton> <z:toolbarbutton label="oturumu Kapat"> <attribute name="onclick"> { memberpanel.visible = false; loginpanel.visible = true; session.removeattribute( "Username" ); mainpanel.src = ""; } </attribute> </z:toolbarbutton> </z:vbox> 60

</z:tabpanel> <z:tabpanel height="10%" > <z:vbox> <z:toolbarbutton label="rezervasyon Yap"> <attribute name="onclick"> { mainpanel.src = "ShowHotelsForMember.jsp"; } </attribute> </z:toolbarbutton> <z:toolbarbutton label="rezervasyon Takip"> <attribute name="onclick"> { mainpanel.src = "ShowReservations.jsp"; } </attribute> </z:toolbarbutton> </z:vbox> </z:tabpanel> </z:tabpanels> </z:tabbox> </z:window> <z:caption image="/images/logo.jpg"/> </z:window> </body> </html> ġekil 51: ZK ile oluşturulan Örnek Uygulama-1 in kodu 61

ġekil 52: Ana sayfanın görünümü 62

ġekil 53: Taşınabilir kullanıcı giriş ekranı 63

ġekil 54: Kullanıcının giriş yapması 64

ġekil 55: Üst menülerin kullanımı 65

ġekil 56: Üye olma için kullanıcının doldurması gereken kayıt formu 66

ġekil 57: Üye olan kullanıcıya üyelik bilgilerinin gösterilmesi 67

ġekil 58: Üye olan kullanıcının üyelik bilgilerinin güncellenmesi 68

11.2. Örnek Uygulama - 2 11.2.a. Uygulama ortamı Uygulamayı denemek için, Eclipse 3.4 (Ganymede), Apache Tomcat 6.0, Java 1.5+ / J2EE sisteminizde kurulu olmalıdır. Aslında örnek oldukça sade bir örnek olduğu için temelde elinizde herhangi bir JDK ve herhangi bir servlet container olması da yeterlidir. Ancak bundan sonraki anlatımlar Eclipse 3.4 ve Tomcat in kurulu olduğu varsayılacaktır. 11.2.b. Uygulamanın Tanımı Aşağıdaki uygulama sisteme kayıtlı otelleri Google Map üstünden haritada göstermektedir. Oteller sisteme kayıt edilirken Dünya üzerindeki enlem ve boylam bakımından koordinatları ile belirtilir. Daha sonra bu koordinatlar kullanılarak oteller harita üstünde gösterilir. 69

11.2.c. Uygulamanın GerçekleĢtirimi <%@ page language="java" contenttype="text/html; charset=iso-8859-9" pageencoding="iso-8859-9" %> <%@ taglib prefix="zk" uri="http://www.zkoss.org/tld/zul/jsp" %> <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix ="bean" uri = "/WEB-INF/tags/struts-bean.tld" %> <%@ taglib prefix="html" uri="/web-inf/tags/struts-html.tld" %> <%@ taglib prefix="logic" uri="/web-inf/tags/struts-logic.tld" %> <html xmlns:z="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd" > <head> <title>otel Ara</title> <script type="text/javascript" src= "http://maps.google.com/maps?file=api&v=2&key=abqiaaaamgxmyr57x DAbAumS9tV5fxTwM0brOpm-All5BF6PoaKBxRWWERSynObNOWSyMNmLGAMZAO1WkDUubA" > </script> </head> <body> <z:window id="searchhotel" title=" Otel Ara" border="normal"> <zscript> import BusinessLogic.GeneralUserService; import java.util.list; GeneralUserService generaluserservice = new GeneralUserService( ); List hotels = generaluserservice.gethotels( ); </zscript> <z:window title="otrot Harita" width="100%"> <center> 70

<z:div style="border: 1px solid red;margin-top:10px; margin-bottom:20px" if="${empty sessionscope.gmapskey}" > Lütfen rezervasyon yapmak istediğiniz oteli harita üstünden seçiniz. </z:div> <z:grid width="500px"> <z:rows> <z:row> <z:textbox width="400px" id="target"/> <z:button width="50px" label="ara"/> </z:row> </z:rows> </z:grid> </center> <z:vbox> <z:gmaps > id ="mymap" lat ="39.8770733211" lng ="32.7287006378" width ="500px" height ="500px" continuouszoom ="true" doubleclickzoom ="true" enablegooglebar ="true" draggable ="true" droppable ="true" focus ="true" showoverviewctrl ="true" showscalectrl ="true" showzoomctrl ="true" enabledragging ="true" scrollwheelzoom ="true" showsmallctrl ="true" showlargectrl ="true" showtypectrl ="true" <attribute name="onmapmove"> mylat.setvalue(self.getlat()); 71

mylng.setvalue(self.getlng()); </attribute> <attribute name="onmapzoom"> myzoom.setvalue(self.getzoom()); </attribute> <attribute name="onmapclick"> import org.zkoss.gmaps.*; import org.zkoss.gmaps.event.*; Gmarker gmarker = event.getgmarker(); if (gmarker!= null) gmarker.setopen(true); mylat.value = event.getlat(); mylng.value = event.getlng(); </attribute> <z:gmarker foreach="${hotels}" lat="${each.hotellocation.latitude}" lng="${each.hotellocation.longitude}" > <attribute name="content"> Teşekkürler, rezervasyon yeriniz seçildi. </attribute> </z:gmarker> </z:gmaps> </z:vbox> </center> </z:window> </z:window> </body> </html> ġekil 59: ZK ile oluşturulan Örnek Uygulama-2 nin kodu 72

ġekil 60: ZK ile oluşturulan Örnek Uygulama-2 73