2 Haziran 2009 Salı

Merhaba

Geçen sene bu aralar blogda bayağı bir hareket varmış. Bu sene yazılar azaldı. Buna rağmen, ziyaretçi sayımız 5000 i geçmiş. Bence yazıları arttıralım. Ne dersiniz ?

13 Mayıs 2009 Çarşamba

SQL SERVER String Functions

SELECT [Kolon1] ,
STUFF([Kolon1],3,9,'-')
+STUFF( substring([Kolon1],3,7),3,9,'-')
+STUFF( substring([Kolon1],5,5),3,0,'-')
FROM [TABLO1]
WHERE
LEN ([Kolon1])= 9
and
CHARINDEX('-' , [Kolon1])=0
and
CHARINDEX('.' , [Kolon1])=0
and
CHARINDEX('/' , [Kolon1])=0



sonuçlar
123546789
12-34-56-789

11 Ocak 2009 Pazar

JAX-WS ile Güvenlik Bilgilerini Almak

Eğer JAX-WS kullanırken bir şekilde servisinize gönderilen mesajın içindeki kullanıcı bilgilerine ulaşmanız icab ederse, web servisinize küçük eklemeler yapmanız yetecektir:

@WebService()
public class LoginWebService {

@Resource
private WebServiceContext context;

@WebMethod(operationName = "operasyon")
public void operasyon() {
ServletContext servletContext = (ServletContext)context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
String kullaniciadi = servletContext.getInitParameter("username");
String sifre = servletContext.getInitParameter("password");
//Sonrası size kalmış! :-))
}
}

Netbeans, Glassfish ve Türkçe!

Windows üzerinde Netbeans ve Glassfish kullanırken bir takım problemler yaşıyorsanız ilk şüphelenmeniz gereken yer dil ve bölge ayarlarıdır. Eğer Glassfish'i başlatırken abuk subuk, internette aradığınızda bile bulamadığınız bir takım hatlarla karşılaşıyorsanız,

1. Netbeans'in kurulu olduğu klasörde etc diye bir klasör bulunuyor. Bunun içinde netbeans.conf dosyasını bir text editör ile açıp netbeans_default_options diye başlayan satırın en sonuna (ama tırnak işaretinin içinde kalacak şekilde

--locale tr_TR

ifadesini ekleyin.

Glassfish'in kurulu olduğu klasörde "lib" klasöründe "Launcher.xml" ve "processLauncher.xml" dosyaları var. Bunların içine

<sysproperty key="user.language" value="tr-TR"/></sysproperty>

satırını ekleyin.

Son olarak uygulama sunucumuzun ilgili domain klasöründe domain.xml diye bir
dosya var. Bunun içine de ilgili yere

<jvm-options>-Duser.language=tr-TR</jvm-options>

satırını eklemelisiniz.

3 Aralık 2008 Çarşamba

Java web uygulamasında web server data source kullanımı

Web uygulamasında web server data source kullanımı için:

1.web serverda data source oluşturuluyor.(web logic için console arayüzü kullanılabilir.)

2.Uygulama web.xml de resource-ref elmanı tanımlanıyor. Bu resource-ref elmanı dış bir kaynağa(burada data source) web uygulamasıreferansı tanımı için kullanılıyor. Buradaki res-ref-name elmanı(XXX) web server da oluşturulan data source jndi name i olacak.
Ör:
<resource-ref>
<res-ref-name>XXX</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

3.Connection ın alındığı ilgili sınıfta, connection ı döndüren metodta javax.naming.Context objesi oluşturup bu objeninlookup metoduna web server da oluşturulan data source jndi name'ini parametre olarak geçerek javax.sql.DataSource objesi elde ediliyor.
Ör:
public static synchronized Connection getConnection() throws Exception {
try
{
Context init = new InitialContext();
Context ctx = (Context) init.lookup("java:comp/env");
DataSource ds = (DataSource) ctx.lookup("XXX");
Connection connection = ds.getConnection();
return (connection);
}
catch (Exception e)
{
throw new Exception(e.getMessage());
}
}

13 Kasım 2008 Perşembe

OC4J Üzerinde Netbeans ile hazırlanmış JAX-WS Webservisleri Çalıştırmak

Şimdi... Bu iş biraz karışık... JAX-WS standardı kullanmak için java versiyonu 1.5 ve üstü olmak zorunda. Bunun sebebi JAX-WS standardında annotation'ların kullanılıyor olması. Bu da biliyorsunuz 1.5'ten sonra gelen bir özellik.... Şu an resmi olarak Java 5 standardını destekleyen hangi application server'lar var bir sayalım:


  1. Glassfish
  2. Tomcat 6
  3. Oracle Weblogic
Görüldüğü gibi listede OC4J yok! Zaten Oracle BEA'yı bünyesine aldıktan sonra OC4J devam etmeyecekmiş gibi görünüyor. Neyse... Asıl konu şu: Netbeans ile webservisi oluşturulunca (Tabi özellikle axis2 ile kullanılmıyorsa) default olarak JAX-WS kullanılıyor. Bunlar zaten Glassfish üzerine rahatça deploy edilip çalıştırılabiliyor. OC4J ile çalıştırmak için build.xml scriptinin içine şu komutları eklemek gerekiyor:


<target name="-pre-dist">
<taskdef name="wsgen" classname="com.sun.tools.ws.ant.WsGen">
<classpath path="${javac.classpath}"/>
</taskdef>
<echo>running wsgen - quixotic</echo>
<wsgen
debug="true"
keep="true"
destdir="build/web/WEB-INF/classes"
resourcedestdir="build/web/WEB-INF/classes"
sei="tr.com.SINIF_ADI">
<classpath>
<pathelement path="${javac.classpath}"/>
<pathelement location="${java.home}/../lib/tools.jar"/>
<pathelement location="build/web/WEB-INF/classes"/>
</classpath>
</wsgen>
</target>


Bundan sonra derlediğimiz kod hem Glassfih hem OC4J üzerinde deploy edilebilir hale gelecektir. Tabi netbeans'de project properties'den library olarak JAX-WS kütüphanesini eklemiş olmak şartıyla!

Hâlâ birşeyleri çözebiliyor olmak ne güzel! :-))

21 Eylül 2008 Pazar

Sevgili dostlarıma bir mektup

Sevgili arkadaşlarım,

Sizlerle hiç unutamayacağım iki sene geçirdim. Ardımda o kadar güzel hatıralar bırakıyorum ki... Sizlerle paylaştığım ne varsa hepsi için teşekkür ediyorum.

Sevgili Gusto,

İşini senin gibi iyi bilen, iyi yapan birisine "arka-daş" olmak harikaydı. Yapılması gereken en mühim işlerde arkamı endişe taşımadan yaslayabileceğim, emanet edebileceğim bir dostla çalışmanın rahatlığını yaşattın bana. Polemiklerimizin tadı tuzu da sendin. Bu zamanda aynı mantık zemini üzerinde durup konuşabileceğimiz insan sayısı bu kadar azken sana rastgelmiş olmak büyük şanstı.


Sevgili Elf,

İşe seninle aynı gün başladık. O günlerde birileri, senin benim için iş arkadaşlığımız neticesinde ifade edeceğin anlamdan bahsetse ona inanmazdım. Bir sürü çetrefilli iş peşinde beraber koşturduk. Bana verdiğin desteğin ve dostluğunun kıymetini kelimelerle ifade etmem mümkün değil. İnanılmaz zerâfetini ve güler yüzünü hiç unutmayacağım.


Sevgili Gelgin,

Senin dostluğun da kazanmış olmakla iftihar ettiğim dostluklardan. Bir insanın bakışlarından temizlik ve iyilik akar mı diye sorsalar "evet" derim. "İnanmıyorsanız Gelgin'le oturun iki dakika sohbet edin!" Polemiklerimizin olmazsa olmazı, sevgili dostum, bu güzel bakışlarını, mütebessim çehreni özleyeceğim.


Sevgili Edi,

Seninle nispeten daha kısa bir süre beraber çalıştık ama şimdi dönüp bakıyorum da sanki yıllarca çalışmış gibi hissediyorum. Senin zor meseleleri anlamak ve bir yerlere oturtmak için vicdan terazinde tartışını hep hatırlayacağım. Hadiselere böylesine ön yargısız yaklaşabilen az insan vardır. Polemiklerimizi daha rasyonel bir zemine çekmek için yaptığın wikipedia araştırmaları da hafızamda hoş birer hatıra olarak kalacak.


Sevgili abSoLuT,

Seni elbette polemiklere katkıların ve Gusto'ya tatlı tatlı takılmaların ile hatırlayacağım. Tabi bir de yılan hikâyesine dönen basın özetleri programıyla! Ben hâlâ basın özetleri programını opensource bir proje yapmak lazım diye düşünüyorum haberin olsun.


Sevgili Halp,

Kadim dostum, sessiz sedasız en önemli projelerden birini tek başına aldın, yüklendin, ayağa kaldırdın. Öyle önemli bir yükü kaldırdın ki, uğraştığın işle benim meşgul olmam hemen hemen hiç gerekmedi. Kıymeti bilinmesi gereken bir adamsın sen. Asansör sırasında hep en arkaya kalışın, her nasılsa ikide bir çeşitli organizasyonların düzenleyicisi oluvermen YM günlerimizin renkli hatıralarıydı.


Sevgili Grkm,

Bu blog işlerine hiç girmedin. O yüzden nick'ini ben uydurdum. Başlangıçtaki olumsuz şartlara rağmen işe başlaman ve bir sene boyunca "oyundan düşmemen" çok etkileyiciydi. Senin önünün açık olduğunu düşünüyorum. Kendini yetiştirmek yönünde biraz daha gayretle çok iyi noktalara geleceksin. Şunu da itiraf edeyim ki seni Fifa'da bir kez olsun yenememiş olmak içimde bir sızı olarak kalacaktır!...


Sevgili Uçan Teneke,

Teknolojiye, bilgisayarlara olan ilgin seni daha çok ötelere taşıyacak. Bu heyecanı kaybetmemeye dikkat etmelisin. İşimiz gereği bir sürü farklı teknolojide kendimizi geliştirmemiz gerekiyor. Bunu en iyi yapan kişi olarak takımımızın "joker" oyuncusu oldun. Çeşitli sebeplerden bu durum seni çok mutlu etmese de uzun vadede lehine olacak. Adres etiket programını devreye aldığın zaman bana haber verir misin? ;-)


Sevgili fkrt,

İlk geldiğimde kursa gitmene mâni olmuş, .net'i kendin gayret ederek öğrenebileceğini söylemiştim. Ve öğrendin! Hem de iyi öğrendin. Beraber çalıştığımız müddetçe beni en çok mutlu eden olaylardan birisi buydu. Hele sen meseleyi kavrayıp yeni teknolojileri heyecanla takip etmeye başlayınca sevincim katlandı. Ne olur bu gayretini sürdür. Günlük sıkıntıların seni durdurmasına izin verme. Hedefini yüksek tut. Türkiye'nin bir numaralı LINQ uzmanı olmak hedefi nasıl?


Sevgili Fırat,

Zaman zaman yaptığın iş gereği de olsa, kurumumuzda hitap ettiğimiz kitleyi en iyi tanıyan kişi olduğunu dile getirdim. Aslında herşey olması gerektiği gibi olsa, el üstünde tutulman gerekirdi. Bizi gerçek dünyaya bağlayan hayat adamı olarak ekibin ayrılmaz bir parçasıydın. Sadece pazarlıklarımız değil, zaman zaman yeraltı dünyası ile, zaman zaman iş dünyası ile ilgili bilgi akışımız da sana emanetti. Ben senin insan ilişkileri hususundaki potansiyelini ileride çok daha güzel değerlendireceğine inanıyorum.


Sevgili Haluk Bey,

Ekibimize katılmanız bir lütuftu. Bu sayede gerçek bir mühendis nasıl olur, iş nasıl doğru yapılır görme fırsatını bulmuş olduk. Pek az insan bilse de koskoca bir projeyi yeniden ele alıp neredeyse baştan yazdınız. Kurumda kullanılan teknolojiler içinde en moderni, en yenisi bu projede kullanıldı. Keşke ekip olarak sizden daha fazla istifade edebilseydik. İstanbul'daki hayatınızda başarılar diliyorum.


Sevgili arkadaşlar,

Hepinize sonsuz teşekkürler, hepiniz çok iyi insanlarsınız ve sizinle çalışmak benim için büyük şanstı... Hepinize ömür boyu mutluluklar diliyorum... Yeniden görüşmek üzere...

22 Ağustos 2008 Cuma

Malezya 2

Kuala Lumpur`da bir cadde

Malezya Tower denilen komunikasyon kulesinin tepesinde yer alan bir restorandayiz. Yandaki arkadas Filipinlerin Ekonomi Bakani :)

Petronas Towers

Genelde teknolojik arastirma kurumlarinin bulundugu bolgede (cyberjaya) yer alan Multimedya Universitesindeki e-galery

Bizim egitimin verildigi Melaka sehrinde bir balik lokantasi (bizdeki baliklarin tadini alamadim ya neyse yine de yedik balik, karides , istakoz artik ne bulduysak )

21 Ağustos 2008 Perşembe

Malezya'dan Sevgilerle...

Petronas Towers`da Koprudeyim (Skybridge)

Petronas Towers

Eye Of Malezeya denilen buyuk donme dolabin bulundugu park. Arka planda Petronas Towers

Hukumet merkezinin bulundugu Putrajaya bolgesinde Basbakanin ofisi.

Arka planda Putrajaya bolgesi. Burasi ise buyuk Convention Center`in bulundugu bir tepe

6 Ağustos 2008 Çarşamba

Sql den takvim yapmaca...

Aşağıdaki kodla sqlde yıllık takvim elde edebilirsiniz. Sql düşündüğünüzden daha güçlü olabiliyor bazen...


SELECT LPAD (MONTH, 20 - (20 - LENGTH (MONTH)) / 2) MONTH, "Sun", "Mon",
"Tue", "Wed", "Thu", "Fri", "Sat"
FROM (SELECT TO_CHAR (dt, 'fmMonthfm YYYY') MONTH,
TO_CHAR (dt + 1, 'iw') week,
MAX (DECODE (TO_CHAR (dt, 'd'),
'1', LPAD (TO_CHAR (dt, 'fmdd'), 2)
)
) "Sun",
MAX (DECODE (TO_CHAR (dt, 'd'),
'2', LPAD (TO_CHAR (dt, 'fmdd'), 2)
)
) "Mon",
MAX (DECODE (TO_CHAR (dt, 'd'),
'3', LPAD (TO_CHAR (dt, 'fmdd'), 2)
)
) "Tue",
MAX (DECODE (TO_CHAR (dt, 'd'),
'4', LPAD (TO_CHAR (dt, 'fmdd'), 2)
)
) "Wed",
MAX (DECODE (TO_CHAR (dt, 'd'),
'5', LPAD (TO_CHAR (dt, 'fmdd'), 2)
)
) "Thu",
MAX (DECODE (TO_CHAR (dt, 'd'),
'6', LPAD (TO_CHAR (dt, 'fmdd'), 2)
)
) "Fri",
MAX (DECODE (TO_CHAR (dt, 'd'),
'7', LPAD (TO_CHAR (dt, 'fmdd'), 2)
)
) "Sat"
FROM (SELECT TRUNC (SYSDATE, 'y') - 1 + ROWNUM dt
FROM ALL_OBJECTS
WHERE ROWNUM <=
ADD_MONTHS (TRUNC (SYSDATE, 'y'), 12)
- TRUNC (SYSDATE, 'y'))
GROUP BY TO_CHAR (dt, 'fmMonthfm YYYY'), TO_CHAR (dt + 1, 'iw'))
ORDER BY TO_DATE (MONTH, 'Month YYYY'), TO_NUMBER (week);

4 Ağustos 2008 Pazartesi

24 Temmuz 2008 Perşembe

SICAKLIK BAŞIMIZA VURDU





















Son günlerdeki halimizi anlatmak için bu resme bakmak yetmez... Yaşamak lazım buyruuun...

23 Temmuz 2008 Çarşamba

Sıcak!

Sıcaklarla birlikte yazarlarımız yazılarına ara vermişlerdir. Şu an içerinin sıcaklığı 35.6 ve yükselmeye devam ediyor....

12 Haziran 2008 Perşembe

DynaFaces - Tablo içerisinde kullanılan button gibi ögeler

Tablo içerisinde "button", "checkbox" vb. kontollar kullanıldığında bu kontrollardan DynaFaces eylemlerini başlatmak mümkün değildir. Aynı zamanda tabloda kullanılan tüm kontrollarda dinamik olarak rowId atanır.
Örneğin :
form1:table1:tableRowGroup1:tableColumn1:button1 kontrolunu kullanmamız yanlış olur, bunun yerine:
1nci satır için form1:table1:tableRowGroup1:0:tableColumn1:button1
2nci satır için form1:table1:tableRowGroup1:1:tableColumn1:button1
...

olarak kullanmamız gerekir. Dinamik olarak satır numarasını almak için (satır numaraları 0'dan başlar, 0 ilk satırdır, en son satır satır miktarı-1'dir):

(Tablo'nun button OnClick JavaScript kısmına aşağıdaki komutları yazabiliriz.)
DynaFaces.Tx.fire('ajaxTransaction1', 'form1:table1:tableRowGroup1:'+'#{currentRow.tableRow.rowId}'+':tableColumn1:button1');
return false;

Ancak DynaFaces için bu çalışmayacaktır. Burada bir "bug" söz konusu. Ancak "bug" giderilmiş durumda ise kullanabilirsiniz. Ancak eğer kullanamıyorsanız problemin çözümü şu şekilde:

1. tablonun dışında form üzerinde kullanmadığınız bir yere bir textField koyunuz. Button'un action event'i yerine artık textField'in valueChange event'ini kullanacağız. Button için yazdığınız Java kodunu TextField valueChange event Java koduna yerleştiriniz. TextField alanına Button JavaScript'i ile rowId'yi atamak suretiyle değerinin değişmesini ve rowId'nin Java kodumuz içerisinde kullanılmasını sağlayacağız.

2. DynaFaces transaction'ını Button'da kullanmayıp TextField için tanımlayınız (Send input "yes" olacak).

3. Button onClick JavaScript kodu :

document.getElementById('form1:textField1').setProps({value:'#{currentRow.tableRow.rowId}'});

document.getElementById('ajaxTransaction1', 'form1:table1:tableRowGroup1:'+'#{currentRow.tableRow.rowId}'+':tableColumn1:button1').refresh('form1:textField1');

DynaFaces.Tx.fire("ajaxTransaction1", "textField1");
return false;

(Burada dikkatinizi DynaFaces.Tx.fire("ajaxTransaction1", "textField1") komutuna çekmek istiyorum. DynaFaces eylemini button kontrolu içerisinde ve textField1 için başlatıyoruz-ateşliyoruz. Bu sayede TextField onChange JavaScript eventi içerisine bu komutu yazmamız gerekmiyor, zaten TextField onchange eventini çalıştırmamız da gerekmiyor ).

4. TextField kontrolunuzun visible özelliğini "false" yapınız.

10 Haziran 2008 Salı

Google ın sırları

Google ın sırları ile ilgili enteresan bir yazı .

DynaFaces (Ajax) - Checkbox, radiobutton ögeleri sorununa çare

Checkbox, radiobutton gibi ögeler Visual Web JSF sayfalarında kullanıldığında bu ögeler ilk kez tıklandığında DynaFaces Ajax eylemi çalışmakta ancak 2nci kez tıklandığında çalışmamaktadır.

Bu durum webuijsf (WoodStock-JSF 1.2), ui (JSF 1.1) ve h (html) ögeleri için de geçerlidir.

Problemin yaratılması :
1. Visual JSF projesi yaratınız. (Ben Java EE5 ve dolayısıyla JSF 1.2'yi seçtim).
2. Proje yaratıldıktan sonra açılan Page1.jsf görsel sayfasına bir WoodStock Basic bölümünden bir adet statictext ve bir adet checkbox yerleştiriniz.
3. Projenizin Component Library bölümü üzerine gelip sağ fare butonuna kullanarak DynaFaces Components (0.2)'yi ekleyiniz.
4. Eğer Java EE5 yerine JDK 1.4'ü şeçtiyseniz web.xml dosyasının Faces Servlet kısmı aşağıdaki gibi olmalıdır.

<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<init-param>
<param-name>javax.faces.LIFECYCLE_ID</param-name>
<param-value>com.sun.faces.lifecycle.PARTIAL</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

5. DynaFaces paletinden sayfanıza AjaxTransaction'ı sürükleyip bırakınız.

6. CheckBox onclik'e aşağıdaki Java Script kodunu yazınız:


DynaFaces.Tx.fire("ajaxTransaction1", "checkbox1");


7. CheckBox process value change eventi (checkbox üzerine çift tıkladığınızda açılacak olan Java kodu):
public void checkbox1_processValueChange(ValueChangeEvent event)
{
Calendar cal = new GregorianCalendar();
staticText1.setText(cal.getTime());
}

8. checkbox1 üzerinde iken sağ fare butonu ile menüden "Configure Ajax Transactions"ı seçiniz sol üst tarafta checkbox1 olduğundan emin olunuz. Transaction'ın ismi "ajaxTransaction1"dir. "Send Input" kısmını "Yes", "Re-Render" kısmını "No" Yapınız.

9. staticText1 üzerine geliniz, sağ fare butonu ile menüden "Configure Ajax Transactions"ı seçiniz sol üst tarafta staticText1 olduğundan emin olunuz. Transaction'ın ismi "ajaxTransaction1"dir. "Send Input" kısmını "No", "Re-Render" kısmını "Yes" Yapınız.








10. Projenizi çalıştırdığınızda ve Checkbox'a birinci kez tıkladığınızda aşağıdaki gibi görülecektir.



Ancak 2nci kez tıkladığınızda static text te görülmesi istenen zaman bilgisinin değişmediğini ve ilk tıkladığınızdaki tarih ve saatin aynı kaldığını göreceksiniz. Başka bir deyişle tazelenmesi istenen static text alanı tazelenmemektedir.

Çözüm :

1. Visual Web JSF sayfanıza bir buton ekleyiniz.

2. button1 üzerinde iken sağ fare butonu ile menüden "Configure Ajax Transactions"ı seçiniz sol üst tarafta checkbox1 olduğundan emin olunuz. Transaction'ın ismi "ajaxTransaction1"dir. "Send Input" kısmını "Yes", "Re-Render" kısmını "No" Yapınız. (button1'i checkbox1 ile aynı yaptık).
3. button1 action eventi (button1 üzerine çift tıkladığınızda açılacak olan Java kodu):
public void button1_action()
{
Calendar cal = new GregorianCalendar();
staticText1.setText(cal.getTime());
}

4. button1 visible özelliğini false yapınız.

9 Haziran 2008 Pazartesi

DynaFaces Örneği (Netbeans 6.1 - Visual JSF)

1. Yeni bir Visual Web JSF projesi yaratınız. (Ben Java EE5 ve dolayısıyla JSF 1.2'yi seçtim).

2. Projenizin Component Library bölümü üzerine gelip sağ fare butonuna kullanarak DynaFaces Components (0.2)'yi ekleyiniz.



3. Eğer Java EE5 yerine JDK 1.4'ü şeçtiyseniz web.xml dosyasının Faces Servlet kısmı aşağıdaki gibi olmalıdır.



4. DynaFaces paletinden sayfanıza AjaxTransaction'ı sürükleyip bırakınız.





5. Page1.jsf görsel sayfasına bir WoodStock Basic bölümünden bir adet statictext ve bir adet textfield yerleştiriniz.

6. textField1 üzerinde iken sağ fare butonu ile menüden "Configure Ajax Transactions"ı seçiniz sol üst tarafta checkbox1 olduğundan emin olunuz. Transaction'ın ismi "ajaxTransaction1"dir. "Send Input" kısmını "Yes", "Re-Render" kısmını "No" Yapınız.




7. staticText1 üzerine geliniz, sağ fare butonu ile menüden "Configure Ajax Transactions"ı seçiniz sol üst tarafta staticText1 olduğundan emin olunuz. Transaction'ın ismi "ajaxTransaction1"dir. "Send Input" kısmını "No", "Re-Render" kısmını "Yes" Yapınız.





8. textField1 process value change event'i için aşağıdaki Java kodunu yazınız. (textField1 üzerinde iken çift tıkladığınızda açılan Java kod kısmına)
public void textField1_processValueChange(ValueChangeEvent event) {
staticText1.setText(textField1.getText());
}

9. textField1 onclik'e aşağıdaki Java Script kodunu yazınız:
DynaFaces.Tx.fire("ajaxTransaction1", "textField1");

10. Projenizi artık çalıştırabilirsiniz.

Aşağıda örnek projeler bulunmaktadır. İlki JDK 1.4 (JSF 1.1), ikincisi ise Java EE 5 (JSF 1.2) örneğidir.



Dynamic Faces UTF-8 probleminin giderilmesi

Dynamic Faces JSF extensions projesinin bir kısmıdır ve JSF ögelerinin ajaxlaştırılmasını ve kısmi olarak tazelenmesini sağlar.

Ancak Türkçe dahil uluslararası karakterlerde ufak bir soruna sahiptir. Aşağıda bu sorunun nasıl giderileceği anlatılmaktadır.

JSF/JSP sayfalarınız UTF-8 olsa bile kısmi olarak Ajax cevabı ISO-8859-1 olmaktadır. Halbuki tazelenen öge örneğin bir listbox ise bu listbox içerisindeki karakterlerin de UTF-8 olarak işleme tabi tutulması gerekir.

ISO-8859-1 karakter “encoding” seçilmediği taktirde varsayılan “encoding” tir. O halde biz “encoding”i aşağıdakine benzer olarak yapmalıyız:

context.getExternalContext().setResponseCharacterEncoding("UTF-8");

Değişikliğin yapılması:
1. https://jsf-extensions.dev.java.net/servlets/ProjectDocumentList?folderID=5580&expandFolder=5580&folderID=0 adresinden en son jsf-extensions-dynamic-faces’i indiriniz. İndirdiğiniz hem binary hem de kaynak olmalı.

2. Kaynak kodları olan dosyayı diskinizde bir klasöre açınız.

3. NetBeans’te “Java Project with existing code” ile yeni bir proje yaratınız ve mevcut kaynak kodlar olarak 2nci adımda belirtilen klasördeki jsf-extensions-dynamic-faces kaynak kodlarınız seçiniz. Projenizin adı 1nci adımda indirdiğiniz binary jar dosyasının adı ile aynı olmalıdır (örnek: jsf-extensions-dynamic-faces-0.1)

4. Projenin class path’ine aşağıdaki kitaplık ve jar dosyaları tanımlanmalıdır:
- Kitaplıklar : JSF 1.2, Web UI Components
- Jar dosyaları: el-api.jar, jsp-api.jar, servlet-api.jar, shale-remoting.jar

5. com.sun.faces.extensions.avatar.lifecycle paketindeki AsyncResponse.java dosyasını NetBeans içerisinden açınız ve aşağıdaki metoda kırmızı ile boyan kısmı ekleyiniz.

public void installOnOffResponse(FacesContext context) {
context.getExternalContext().setResponseCharacterEncoding("UTF-8");
origResponse = context.getExternalContext().getResponse();
context.getExternalContext().setResponse(getNoOpResponse(origResponse));
}


6. Projenizi derleyiniz ve dist klasöründeki jar dosyasını
${netbeans_installation_dir}/visualweb1/modules/ext klasörüne koyunuz.

Eğer dilerseniz projenizi derlediğiniz build klasörünün altındaki com.sun.faces.extensions.avatar.lifecycle paketinin altında bulunan class uzantılı dosyaları 1nci adımda indirdiğiniz original binary jar dosyasının ilgili kısmına da kopyalayıp kullanabilirsiniz.

Aşağıda yukarıdaki adımlar uygulanarak sorunun düzeltildiği 2 jar dosyasının bulunduğu zip'li dosya bulunmaktadır, aşağıdaki linkten indirip hemen kullanmaya başlayabilirsiniz.

4 Haziran 2008 Çarşamba

RichFaces/Ajax4JSF ve Netbeans

Richfaces Ajax kütüphanesini JSF 1.2 (WoodStock) ile kullanmak mümkün değildir. Çünkü WoodStock zaten Ajax'ı kullanabileceğiniz ögeleri içerir. webuijsf etiketli ögeler dışındaki html veya RichFaces (a4j etiketli) ögeler kullanılabilir.

webuijsf ögelerini peki nasıl kullanırız ?

2 yöntemi var, bunlardan biri WoodStock Ajax'ı kullanmamak, diğeri ise JSF 1.1'i kullanmak. Burada JSF 1.1'i kullanmak anlatılacaktır.

1. Netbeans ile Visual Web JSF projesi yaratmaya başlayın. İlk 2 adımı geçtikten sonra 3ncü adımda (Server and settings) Java EE 5 version bölümünde J2EE JDK 1.4'ü seçiniz ve projenin yaratılmasını tamamlayınız.

2. Proje yaratıldıktan sonra projenizin özelliklerini (Properties) proje adı üzerine gelerek sağ fare butonu ile görünüz. "Sources" bölümünde "Source/Binary format" JDK 1.4 görünüyorsa sunucunıuzdaki JDK sürümüne uygun olarak JDK 5 veya JDK 6 yapınız. Eğer JDK 1.4 olarak kalırsa JAX-WS Web servislerini kullanmanız mümkün olmayacaktır.