Struts Rkindan Wwwjavadilicom

You might also like

Download as pdf
Download as pdf
You are on page 1of 18

o m

HACETTEPE ÜNİVERSİTESİ

i.c
BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

BİL447 - YAZILIM MÜHENDİSLİĞİ LABORATUVARI

dil
ARAŞTIRMA ÖDEVİ

(STRUTS)
va
Nilay KINDAN
20022054
ja

nilaykindan@hotmail.com
w.
ww

OCAK, 2005

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 1 / 18


m
GENEL.......................................................................................................................................................................... 3
ACTION SINIFI ........................................................................................................................................................... 3
ACTIONFORM SINIFI ............................................................................................................................................. 4

o
HTML FORMLARI .................................................................................................................................................... 4
GİRDİLERİ ELE ALMA............................................................................................................................................ 5
METİN GİRDİSİ(TEXT INPUT) ..................................................................................................................................... 5

i.c
AÇILIR KUTU GİRDİSİ(DROP-DOWN COMBO BOX INPUT) ......................................................................................... 5
RADYO DÜĞMESİ GİRDİSİ .......................................................................................................................................... 7
ONAY KUTUSU GİRDİSİ .............................................................................................................................................. 7
ÇIKTILARI ELE ALMA............................................................................................................................................ 8
METİN ÇIKTISI(TEXT OUTPUT) .................................................................................................................................. 8
STRUTS’ TA TABLO YARATMA ................................................................................................................................... 8
ITERATE ETİKETİNİN ETKİ ALANINDA(SCOPE) İNDİSLİ NİTELİK KULLANMA.............................................................. 8

dil
BİR TABLODA ONAY DÜĞMELERİ KULLANMA .......................................................................................................... 9
RADYO DÜĞMELERİ TABLOSU YARATMA ............................................................................................................... 10
HATA MESAJLARI.................................................................................................................................................. 11
HATA MESAJLARINDA SABİTLERİN KULLANIMI ...................................................................................................... 12
HATA MESAJLARI İÇİN SAYFA BAŞLIĞI VE SAYFA ALTLIĞI ..................................................................................... 13
ACTİONFORM GEÇERLEME(VALİDATE) VE RESETLEME(RESET) ...................................................... 15
va
STRUTS-CONFİG.XML NEDİR?......................................................................................................................... 16
GENEL YÖNLENİCİLER(GLOBAL FORWARDS) .......................................................................................................... 16
ÇEKİRDEK BİLDİRİMLERİ ......................................................................................................................................... 16
ACTİON EŞLEMLERİ(ACTİON MAPPİNGS)................................................................................................................. 16
KAYNAKÇA:............................................................................................................................................................. 18
ja
w.
ww

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 2 / 18


m
GENEL

o
Struts model, görünüm(view) ve denetçi(controller) MVC tasarım örüntüsüne dayalı sunucu
taraflı bir java uygulamasıdır. Web uygulamalarının sunum katmanını kolayca ayırabilmek, aynı
zamanda birim işlem ve veri katmanından soyutlamak için tasarlanmış açık kodlu bir

i.c
framework’tür.
Model: Model veri nesnelerinin kullanıcıya sunumundan sorumludur
Görünüm: Modelin ekrana sunumunda görev alır. Veri nesnelerinin o anki durumlarını sunar.
Denetçi: Kullanıcı girdileri ile etkileşecek kullanıcı arayüzlerinin yollarını tanımlar. Denetçi
bileşeni model veya veriyi işleyen bir nesnedir.
Struts MVC nin JSP, JSP etiketleri(tags) ve java servletlerinden oluşan kombinasyonun
gerçekleştirimidir.Struts daki her görünüm bileşeni struts etiketlerinin kombinasyonlarını
barındıran bir JSP ile eşleşir.

- İstem geliyor.
dil
Denetçi ve Action sınıflarını etkileşimleri şu şekildedir:

- Denetçi(ActionServlet) istemi ele alıyor ve hangi action olduğuna karar veriyor.


- Action modelle ilgili işlemleri yapıyor.
- Action çalşmasını bitirince, kontrol denetçiye dönüyor ve bir anahtar sağlıyor.Denetçi
va
anahtara bakarak nereye sapması gerektiğine karar veriyor.
- Denetçi istemi dönen anahtarın bağlı olduğu görünüme yönlendiriyor, görünüm de
sonuçları action’a gösteriyor.

ACTION SINIFI
ja

Action sınıfının birkaç görevi var:

- Görüntülenecek JSP için veriyle birlikte istem(request)/oturum başlatmak


- Veri ile ActionForm sınıf çekirdeğini(bean) kurmak
w.

- ActionForm sınıf çekirdeğindeki kullanıcıdan dönen veriyi geçerlemek(validate) ve veri


tabanında saklamak
Bu son madde için Action sınıfındaki name alanına karşılık gelen struts-config.xml de name/yol
çifti(yerel ve genel yönleniciler) kurulur.

JSP sayfasına veri aktarmak için mutlaka bir ActionForm sınıfına ihtiyaç vardır, yani bir JSP
ww

sayfasından baksa bir JSP sayfasına direkt bir geçiş söz konusu değildir. JSP’lere direkt erişim
tehlikelidir, mutlaka denetçi üzerinden geçiş yapmaları gerekiyor. Aksi takdirde denetçinin
sağlayacağı erişim kontrolü atlanmış olur.

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 3 / 18


m
ACTIONFORM SINIFI

o
ActionForm sınıfı bir yastık alanı gibi düşünülebilir.Kullanıcı yanlış veri girerse, bunun hemen
veri tabanına gitmesi engellenmiş oluyor. Kullanıcının girdiği eski verilerd bir yanlişlık varsa,
kullanıcı nerede hata yaptığını görebiliyor ve bunu düzeltebiliyor.
ActionForm sınıfındaki bütün alanlara ilk değerler atayabilirsiniz. Struts bu ilk değerleri gösterir

i.c
ve kullanıcının bunları değiştirmesine olanak verir. Kullanıcı formu onaylar, siz geçerlersiniz,
hataları saptarsınız, struts’a bulduğunuz hataların listesini verirsiniz ve bunları ele almasını
söylersiniz. Struts kullanıcıya formun üst kısmındaki hata listesiyle birlikte formu tekrar
görüntüler. Böylece kullanıcı hatalarını görür, düzeltir ve formu yeniden onaylar.

HTML FORMLARI

dil
Struts’daki html etiketleri(tag) genellikle sadece html:form etiketi bağlamı içinde çalışır.
Örneğin:

<html:form action="/TanımDüzenle.do" scope="session">


va
</html:form>

TanımDüzenle.do bu jsp için bir action sınıfıdır. scope verinin bulunacağı ve geçerli olacağı
faaliyet alanıdır. Bu form sunucuya html:submit etiketi kullanılarak onaya gönderilir. Aşağıda
bunun örneği yer almakta:

<html:submit property=”onayDüğmesi” value=”Düzenle”/>


ja

Yukarıdaki satır; onayDüğmesi dizgisini form çekirdeğinin property niteliğini ve value


niteliğinin değerini “Düzenle” olarak atar ve formu onaylar.

Bu action sınıfınızda ne yapacağınızı şekillendiren bir anahtardır. Eğer bu alan bos olsaydı, action
w.

sınıfınızı başka bir sayfadan alırdınız ve ilk değerlerini atardınız. Alan boş değilse bunu
kullanıcının “Düzenle” düğmesine basmasıyla alırsınız. value hem düğmeyi etiketlendirmek için
hem de property ile gösterilen alanın değerini atamak için kullanılır.

<html:submit property=”iş ” value=”Ekle”/>


<html:submit property=”iş” value=”Düzenle”/>
ww

<html:submit property=”iş” value=”Kaydet”/>

Form onaylandığı zaman ekleme, düzenleme veya kaydetme işlemlerinden hangisini yaptığınızı
“iş” alanını kontrol ederek karar verebilirsiniz.

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 4 / 18


m
GİRDİLERİ ELE ALMA
Struts’ta girdiler çoğunlukla html:form etiketi bağlamı içinde ortaya çıkar. Html etiketleri sadece
htlm:form etiketi bağlamında çalışır.

o
Metin Girdisi(Text Input)

JSP’ye bir metin kutusu değeri girmek için şu struts etiketini kullanabilirsiniz.

i.c
<html:text property="kullanıcıAdı"/>

Bunu çalıştırmak için ActionForm çekirdeği “kullanıcıAdı” olarak adlandırılan özel(private) ve


korunmuş(protected) dizgi değerleri içn “setKullanıcıAdı” adlı atama(setter) ve
“getKullanıcıAdı” adlı değer döndürme(getter) metodlarını içermelidir. Struts java

dil
çekirdeğindeki property i getirerek JSP de görüntülemeyi ve onaya gönderildiğinde JSP den
alınan değerle java çekirdeğindeki property i doldurmayı sağlar.

Açılır Kutu Girdisi(Drop-Down Combo Box Input)

Açılır kutular kullanıcının birden çok eleman arasından birini seçmesi için kullanılır. Struts’ta bu
select, option ve options etiketleri kullanılarak gerçekleştirilir. Kullanıcı açılır kutuda bir madde
va
seçerken, struts form çekirdeğinde seçilen değeri bir değişkenle ilşikilendirir. Bu değişkenin ilk
değeri seçim öncesi görünen değeri gösterir.

Seçimi select etiketinin value niteliğini kullanarak hard coding(programda verinin kodun içinde
olduğu dolayısıyla değiştirilmesinin zor olduğu şekli) de mümkündür. Bu sadece seçim öncesi
bir değeri istediğimiz zaman yararlıdır. Örneğin ülke adlarının alfabetik sıralandığı bir listede her
ja

zaman “Türkiye” nin görünmesi gibi. Bunu yapmanın anlamı kullanıcı bu ekrana geldiğinde
“Türkiye” nin öncelikli değer olması ve kullanıcı seçiminin bir işe yaramamasıdır. Bu kötü bir
fikirdir.

Select aşağıdakilerle kullanılabilir:


w.

- dizgi kümesi(collection of strings), dizi listesi(arraylist)


- her biri dizgi alanları içeren çekirdek kümesi
- kod içine gömülü(hard coded) değerler
- yukarıdakilerin kombinasyonu

Dizgilerin dizi listesi ile:


ww

Dizi listesinin adı “isimListesi” olsun. Bu liste istem veya oturumdan birinin içine koyulacak.
Kullanıcının seçimiyle atamak için kullanılan form çekirdeğindeki alanın adı “seçilenDeğer”.
Formda bu değer seçim öncesi değer olarak atanır.

<html:select property="seçilenDeğer">

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 5 / 18


m
<html:options name="isimListesi" />
</html:select>

Dizgi dizi listesi ile seçilen value nasıl ilişkilendirilir:

o
Select şu sekilde değiştirilir:

<html:select property="seçilenDeğer" value="birİsim">


<html:options name="isimListesi" />

i.c
</html:select>

burada “birİsim” dizi listesindeki isimlerden biridir.


Çekirdek dizi listesi ile:

Çekirdeklerin dizgi alanları şunlarla ilgilidir:

-
-
görüntülenenDeğer
kimlikDeğeri
dil
Dizi listesinin adı “çekirdekListesi” olsun. Bu liste istem veya oturum dan birinin içine koyulur.
Kullanıcının seçiminin atanacağı form çekirdeğindeki alanın adı “seçilenDeğer” dir. Bu seçilen
çekirdeğin “kimlikDeğeri” ne atanacaktır. Bu değer aynı zamanda formdaki seçim öncesi değere
va
atanır. Kullanıcı “görüntülenenDeğer” in içeriğini listedeki bir eleman olarak görecektir.

<html:select property="seçilenDeğer">
<html:options collection="isimListesi" property="idValue"
labelProperty="görüntülenenDeğer"/>
</html:select>
ja

Çekirdeklerin dizi listesi ile seçilenDeğer nasıl ilişkilendirilir:

Select şu şekilde değiştirilir:

<html:select property="seçilenDeğer" value="birÖzellik">


w.

<html:options collection="isimListesi" property="kimlikDeğeri"


labelProperty="görüntülenenDeğer"/>
</html:select>

“birÖzellik” options etiketinde collection niteliği tarafından belirlenen listedeki çekirdeğin


alanlarındaki dizgilerden biridir.
ww

İlişkilendirilmiş Dizgiler

Kullanıcının seçimi olan seçilen değer form çekirdeğindeki alanın adına atanır. Bu değer formda
seçim öncesi değere atanmalıdır.

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 6 / 18


m
<html:select property="seçilenDeğer">
<html:option value="değer1"/>
<html:option value="değer2"/>
<html:option value="değer3"/>
</html:select>

o
İlişkilendirilmiş dizgilerle “SeçilenDeğer”in İlişkilendirilmesi

Select şu şekilde değiştirilir:

i.c
<html:select property="selectedValue" value="değer2">
<html:option value="değer1"/>
<html:option value="değer2"/>
<html:option value="değer3"/>
</html:select>

Radyo Düğmesi Girdisi

dil
Radyo düğmesi girdisi için kullanıcıya birbirini dışlayan birkaç seçenek sunulur ve sadece bir
tanesini seçmesine izin verilir. Bir örnek:
va
<html:radio property="seçim” value=”ssk” />
<html:radio property="seçim” value=”emeklisandığı” />
<html:radio property="seçim” value=”bağkur” />

Hepsi aynı radyo düğmesi grubunda olduğu için property nitelik değerleri aynı, bu yüzden
karşılıklı dışlama sözkonusu. Seçim öncesi değere value nitelik değerlerinden birini eşleştirmek
için action sınıfınızdaki form çekirdeğindeki niteliğe “seçim” değerini atayın.
ja

Onay Kutusu Girdisi

Onay kutusu struts’ ın diğer girdi türlerinden biraz farklıdır. Formdaki türü boole(boolean)
w.

olmalıdır. Ayrıca çalışması için değerini form çekirdeğindeki reset metodunda 0 (false)
atamalısınız. Bunun sebebi html’nin sıfır değerli onay kutuları için değer göndermemesidir. Bir
örnek:

<html:checkbox property=”öğeEkle” value=”on”/>


ww

Seçim öncesi değeri belirlemek için baska bir alan kullanılmalıdır. Bu yüzden “öğeEkle” alanının
silinmesi gerekir.
Onay kutusunun bütün nitelikleri seçmelidir. value bu onay kutusunun seçilip seçilmediğini
belirler.Hiç bir şey yapılmazsa değeri “on” dur.

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 7 / 18


m
ÇIKTILARI ELE ALMA
Metin Çıktısı(Text Output)

bean:write etiketi metnin yazdırılması için kullanılır.Bir örnek:

o
<bean:write property="isim" filter="true"/>

i.c
Form çekirdeğindeki “isim” alanının değerini yazmak içindir. filter niteliği html’de problem
yaratacakkarakterleri otomatik kodlamaya izin verir.Hiç bşr değişiklik yapılmadığı
takdirde(default) değeri 0 (false)’tır.

Struts’ ta Tablo Yaratma

dil
Struts’ta iterate etiketi tablo yaratmak için kullanılır. Aşağıda basit bir örnek var.

<logic:iterate id="öğrenci" name=”ÖğrenciListesi” scope="session"


type="hubm.ogrenci.proje.ÖğreciListeForm">
<tr>
<td><bean:write name="öğrenci" property="ad"
va
filter="true"/></td>
<td><bean:write name="öğrenci" property="soyad"
filter="true"/></td>
<td><bean:write name="öğrenci" property="numara"
filter="true"/></td>
<td><bean:write name="öğrenci" property="bölümkodu”
filter="true"/></td>
ja

</tr>
</logic:iterate>

bean:write etiketinin name niteliği property’i form çekirdeğinde aramak yerine iterate etiketi
w.

tarafından yaratılan çekirdeği kullanmak için kullanılıyor.


scope değeri verilmemişse etiket çekirdeği sırayla sayfa(page), istem(request), oturum(session)
veya uygulama(application) etki alanlarında arıyor.
Type değeri formun fiziksel yolunu verirken; name formun mantıksal ismini veriyor.
ww

Iterate Etiketinin Etki alanında(scope) İndisli Nitelik Kullanma

Iterate kullanırken bir tabloya giriş yapmaya imkan verilmesi için html etiketlerinin indisli
niteliklerini kullanmalısınız.Bunun birkaç örneği aşağıda ele alınmış. Bu niteliği ele alırken
dikkat edilmesi gereken bir nokta da verinin struts’ta sadece form çekirdeğine girilebilmesidir.

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 8 / 18


m
Bu demek oluyor ki çalışacak indisli niteliği almak için listenizi form çekirdeğinde
saklamalısınız.

İndisli nitelik 1.02. sürümden sonra ortaya çıkmıştır.

o
Bir Tabloda Onay Düğmeleri Kullanma

Bir tablonun elemanları düzenlenmek veya silinmek üzere sunulduğu zaman, tablodaki her satıra

i.c
karşılık bir ya da iki onay düğmesinin olmasını isteyebilirsiniz. Aşağıda bunun örneği var.

<logic:iterate id="öğrenci" name=”ÖğrenciListesi” scope="session"


type="hubm.ogrenci.proje.ÖğreciListeForm">
<tr>

dil
<td> <html:submit indexed="true" property="komut"
value="Düzenle" />
</td>
<td> <html:submit indexed="true" property="komut" value="Sil" />
</td>
<td>
<bean:write name="öğrenci" property="ad" filter="true"/>
</td>
va
<td>
<bean:write name="öğrenci" property="soyad" filter="true"/>
</td>
<td>
<bean:write name="öğrenci" property="numara" filter="true"/>
</td>
<td> <bean:write name="öğrenci" property="bölümkodu”
ja

filter="true"/>
</td>
</tr>
</logic:iterate>
w.

Bu “komut” dizgi dizisinin property niteliğine düğmeye basıldığı zaman “Düzenle” atanıyordu,
örneğin komut[3]==”Düzenle”. Struts reflection kullanır, reflection da atama ve değer döndürme
metodlarına bağlı olarak türü belirler. Bu örnekte form çekirdeğinin ilgili bölümleri şu şekildedir:

private int secilenDeger = 0;


private String komut = “”;
ww

public void setKomut (int index, String deger)


{
secilenDeger = indis;
komut = deger;
}

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 9 / 18


m
public String getKomut (int indis)
{
return komut;
}

o
public String getKomut()
{
return komut;

i.c
}
public int getIndis()
{
return secilenDeger;
}
Action’da hangi düğmeye basıldığını “komut” u kontrol ederek ve hangi eleman olduğunu indisi

dil
kontrol ederek görebilirsiniz. Formda oturum veya isteme geçirdiğiniz listeyi alıp getirmeniz
gerekebilir, bu durumda indisi kullanarak seçilen elemanı alabilirsiniz.

Radyo Düğmeleri Tablosu Yaratma


va
Bazı durumlarda aşağıdaki tablo benzeri tablolar yaratılmak istenebilir.

durum
muaf geçti Kaldı Form elemanı
0 * 0 Genel ders durumu
* 0 0 Akademik ders durumu
ja

select/ options etiketlerinin tersine radyo düğmesi etiketi tektir. select te struts’a sonucu nereye
koyacağınızı, options’ta ise listeyi nereden alacağınızı söylemeniz gerekir. Radyo düğmesinin
etiketini tekliğinden dolayı liste; sonuçların saklandığı yerle aynı yerden gelir(struts’ta sonuçlar
sadece form çekirdeğinde saklanır). Aşağıda bunun nasıl yapılacağının örneği var.
w.

Bu örnekte çekirdek dizi listesi veri yapısı var. Öyle ki her çekirdek kapı adı ve durum propery
sine sahip. Eğer radyo düğme etiketinde belirlenen değer ile çekirdeğin durum özelliği eşleşirse,
bu radyo düğmesi tablo görüntülenirken kontrol edilir. Kullanıcı formu onayladıktan sonra, dizi
listesi getirilip her bir çekirdeğin durum alanının o anki değeri alınır.
ww

Dikkat edilmesi gereken nokta; iterate etiketindeki id için kullandığınız değer ile form
çekirdeğindeki property değerinin örtüşmesidir. Bu sadece yerel değişken yaratmak için değil,
sonuçların nereye gideceğini de belirlemek için kullanılıyor. Bu anlatılanlar id nin her şeyin
yolunda gitmesi için gereken iki görevidir.

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 10 / 18


m
HATA MESAJLARI
Struts etiketlerin hata mesajlarını göstermelerine olanak verir:<html:errors/>. Bu struts etiketi jsp
içinde html’nin üretildiği noktada hata mesaj listesinin eklenmesine yol açar. Bu etiket
<html:errors property=”anahtar”/> da görüldüğü gibi bir property niteliğine sahiptir ve bu etiket

o
sadece “anahtar” ile eşleşen hata mesajlarının görüntülenmesini sağlar.

Action sınıfınızda, bir hata yakaladığınız zaman şu sekilde devam edilir:

i.c
ActionErrors hatalar = new ActionErrors( );
errors.add(parametre1,new ActionError(parametreler));
saveErrors(istem , hatalar);
return (new ActionForward( eşlem.getInput()));

dil
Burada “istem”(request) HttpServletRequest türündedir. “eşlem” ise ActionMapping türündedir.
Hata mesajı listesi ActionErrors hatalar=new ActionErrors ile yaratılır ve tekil bir ActionError
da “ add” metodu ile hatalara eklenir. “add” metodu iki parametre alır. Bunlar html:error
etiketinde kullanılacak bir anahtar ve hata mesajını kapsülleyen(encapsulate) ActionError’ dır.
Yine iki parametre alan aşırı yüklenmiş add metodunda hatalar.add( String özellik, ActionError
hata) özellik(property) hatanın kategorisini tanımlamak için kullanılır.
va
ActionError nesnesinin yapıcı metodu(constructor) birden beşe kadar parametre alabilir.Birinci
parametre “UygulamaKaynakları.properties” kütüğüne anahtardır. Bu kütük hata mesajlarının
oluşturduğu metni içerir. Kalan parametreler seçmelidir, hata mesajlarındaki yer-tutucular(place-
holders) ‘ın yerine geçen değerlerdir. Parametreler ve mesaj dizgilerinin nasıl yaratıldığı
hakkında daha kapsamlı bilgi için “java.text.MesageFormat” kütüphane dökümanları
ja

incelenmelidir.

Basit bir örnek:


UygulamaKaynakları.properties kütüğünde:
VTHata = <li>Hata: {1}çalışılırken {0}
w.

Jsp kütüğünde:
<html:errors/>

Action sınıf kütüğünde:


hatalar.add(“öğrenciListeDBError”,
ww

new ActionError(“VTHata”,
”alan bulunamadı” ,
"öğrenci listesi almaya "));

JSP de görüntülenen Hata Mesajı:

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 11 / 18


m
Hata: öğrenci listesi almaya çalışılırken alan bulanamadı

Hata Mesajlarında Sabitlerin Kullanımı

o
Derleme zamanında dizgiler hata almazlar. Derleyicinin potansiyel çalışma zamanı hatalarını
bulmasına yardımcı olmak için mümkün olduğunca sabit kullanmak bir standart haline gelmiştir.
Hata mesajları için iki yerde sabit kullanımı uygundur.

i.c
Birincisi “UygulamaKaynakları.properties” kütüğündeki mesaj anahtarlarını “Sabitler” kütüğü
içine yerleştirmektir. Hata mesaj anahtarlarının bütün referansları
“UygulamaKaynakları.properties” kütüğündeki hata mesajları ile birebir eşleşir.

İkincisi ActionError sınıfına konan tekil ActionError nesnelerini kimliklendiren anahtarlar için
action alt sınıflarında yerel sabitler yaratmaktır. html:errors etiketinin property niteliği ile eşleşen

Sabitlerle ilgili Örnek:

com.öğrenci.Sabitler.java kütüğünde:
dil
anahtar yine listede dönen bir elemanla eşleşecektir.

public static final String VT_HATA= "VTHata";


va
UygulamaKaynakları.properties kütüğünde:
VTHata=<li>Hata: {0} çalışılırken {1}

JSP kütüğünde:
<html:errors />
ja

Action sınıf kütüğünde:


public final String OGRENCI= “Öğrenci”;
public final String OGRENCI_VT_HATA = Constants.VT_HATA + "." + OGRENCI;
w.

hatalar.add(OGRENCI_VT_HATA,
new ActionError (Constants.VT_HATA,
”öğrenci listesi almaya” ,
"alan bulunamadı"));

Hata Mesajı
ww

Hata: öğrenci listesi almaya çalışılırken alan bulanamadı

JSP Kütüğü içinde Sabitlerin Kullanımı ile İlgili Basit Örnek

Sabitler kütüğünde:

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 12 / 18


m
public static final String VT_HATA = "VTHata";

UygulamaKaynakları.properties kütüğünde:
VTHata=<li>Hata: {0} çalışılırken{1}

o
JSP kütüğünde:
<%@ page
import="com.öğrenci.controller.org.ÖğrenciEkleAction" %> <html:errors
property= "<%= ÖğrenciEkleAction. OGRENCI_VT_HATA %>" />

i.c
Action sınıf kütüğünde:
public final String OGRENCI = “öğrenci”;
public final String OGRENCI_HATA =
Sabitler.VT_HATA+ "." + OGRENCI;

errors.add(PARENT_ORGS_DB_ERROR,

Hata Mesajı
dil
new ActionError (Sabitler.VT_HATA,
”öğrenci listesi almaya” ,
"alan bulunamadı"));

Hata: öğrenci listesi almaya çalışılırken alan bulanamadı


va
Yorumlar:

1. Sabitlerde hata mesaj parametreleri belirlenebilmesine rağman aslında buna gerek


yok.Çoğu zaman parametre dizgisi kural dışı durum(exception) metninden geliyor çünkü.
ja

2. Bir hata mesajı ile bir alanı birleştirmek mümkündür. Bunu yapabilmek için her alan
kümesi kendi dene/yakala(try/catch) bloğunda kapsüllenebilir, böylece her hata mesajının
yeri belli olur. html:errors etiketi parametresiz kullanıldığı zaman hata mesajı listesinden
sonra sayfayı ortadan bölen bir çizginin görünmesine neden oluyor.
w.

Hata Mesajları için Sayfa Başlığı ve Sayfa Altlığı

UygulamaKaynakları.properties kütüğünde sadece hata mesajları saklanmıyor, bunu yanında hata


ww

sayfa başlığı ve altlığı da burada saklanıyor. Bir örnek:

hatalar.header=<hr><p><b><center>Bu sayfa için Hatalar</center></b></p>


hatalar.footer=<hr>

Bu şu şekilde görünür:
-----------------------------------------------------------------------

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 13 / 18


m
Bu sayfa için Hatalar
.Hata: Bu bir hatadır
.Hata: Bu başka bir hatadır.
-----------------------------------------------------------------------
JSP sayfasının geri kalanı

o
Eğer hataların tekil alanlardan sonra görüntülenmesini istiyorsanız sayfa başlığında ve altlığında
herhangi bir atama yapılmadığından emin olmalısınız.

i.c
dil
ja va
w.
ww

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 14 / 18


m
ActionForm Geçerleme(Validate) ve Resetleme(Reset)

ActionForm tabanlı java çekirdeğinde validate metodu şu şekildedir:

o
public ActionErrors validate(ActionMapping eşlem, HttpServletRequest istem)

Bu; kullanıcının girdilerini geçerlemek için çağrılır. Java çekirdeği ayrıca aşağıda görüldüğü gibi
bir reset metodu da belirleyebilir.

i.c
public void reset(ActionMapping eşlem, HttpServletRequest istem)

Bu metod java çekirdeğindeki değerleri onların ilk hallerine dönüştürür.

validate metodu denetçi servlet tarafından java çekirdeği özellikleri yaygınlaştırıldıktan(deploy)

2.
dil
sonra çağrılır. validate karşılık gelen action sınıfının perform metodu çağrılmadan hemen önce
çağrılır. validate metodu şu seçeneklere sahiptir:

1. Uygun geçerlemeleri yap ve hiçbir problem bulma. boş değer(null) veya sıfır
büyüklükte ActionError döndür ve denetçi servlet e uygun action sınıfının perfom
metodunu çağır.
Uygun geçerlemeleri yap ve problem bul. Bir ActionErrors kopyası döndür. Öyleki bu
va
sınıflar görüntülenecek hata mesaj anahtarları içersin. Denetçi servlet <html:errors>
etiketinin kullanacağı uygun bir istem niteliği alarak bu diziyi saklar ve bunu giriş
formuna kadar yollar (Bu form ActionMapping için girdiformu property değeri ile
kimliklendirilmiştir ve bununla ayırt edilebilmektedir) .

validate metodunun normal gerçekleştirimi boş değer döndürür ve denetçi sevlet gerekli
ja

geçerlemenin action sınıfı tarafından yapıldığını farzeder. Bu normal şartlarda olur fakat çoğu
geçerleme iş mantığına aykırı bir geçerleme işlemi gerçekleştirir ve ActionForm çekirdeği
kendisine bileşik bir işmantığı içermez.

Not: Reset onay kutusu kullanıyorsanız form çekirdeğinde kullanılmaz.


w.

İş mantığınız ,JSP niz ve tümleşik olan java çekirdeğine ek olarak; veri tabanına veri saklayan ve
veri getiren diğer sınıflarada sahip olmanız gerekir .
ww

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 15 / 18


m
Struts-config.xml NEDİR?
Struts-config.xml de 3 tür bilgi bulunur:

o
Genel Yönleniciler(Global Forwards)

<forward name="JSP için Ad" path="/JSP Adı.jsp"/>

i.c
bir örnek: <forward name=”AnaSayfa” path=”/AnaSayfa.jsp”/>

Bu name’ i kullanarak kendi jsp’nizden diğer sayfa bağlantılarına gitmenizi sağlar. Eğer dizin
yolu değişirse siz de JSP nizde herhangi bir değişiklik yapmaya gerek kalmadan sadece
struts-config.xml kütüğünde değişiklik yaparak halledebilirsiniz .Bunu yapmak için şu formu
kullanbilirsiniz:

görüntülenecek bağlantı adı


</html:link>

Bir örnek:
dil
<html:link forward="genel yönlenicilerde tanımlı değer">
va
<html:link forward="KullanıcıEkle">
Kullanıcı eklemek için tıkla
</html:link>

Çekirdek Bildirimleri
ja

<form-bean name="Form Adı" type="Çekirdeğin dizin yolu"/>

Bir örnek:
w.

<form-bean name=”KullanıcıEkleForm”
type=”com.öğrenci.ActionForms.KullanıcıEkleForm” />

Kullanıcının girdilerini kabul edecek her JSP sayfanız için bunlardan bir tane olmalıdır.

Action Eşlemleri(Action Mappings)


ww

Bunu iki çeşidi vardır. Biri girdi kabul edecek JSP ve girdi kabul etmeyecek JSP. Girdi kabul
etmeyecek JSP ler için tümleşik bir ActionForm düşünülemez.
<action path="/bu sayfanın yolu"
type="action sınıfının yolu"

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 16 / 18


m
scope="request"
input="tümleşik JSP nin yolu">
<forward name="bir isim" path="/JSP nin yolu"/>
</action>

Bunun bir örneği:

o
<action path="/KullanıcıEkle"
type=" com.ogrenci.Action.KullanıcıEkleAction "
scope="request"

i.c
input="/jsp/KullanıcıEkle.jsp">
<forward name="basarılı" path="/jsp/KullanıcıEkle.jsp"/>
</action>

path niteliği bu sayfanın yolunu veriyor.


type niteliği bu action için action sınıfına yolunu verir.

dil
input niteliği JSP ye bu action için yolunu verir.
forward niteliği action sınıfında kullanılacak “name” leri veriyor. Örneğin action sınıfınızda
kullanıcının girdisine bağlı olarak farklı sayfalara gidebilirsiniz. Bunu yukarıdaki tanımlı
name’leri kullanarak yapabilirsiniz. Gitmek istediğiniz sayfa başına bir name tanımlamak
yeterlidir. Bu size hedef sayfa değiştşiğinde struts-config.xml’i düzenlemeye olanak verir. Eğer
kullanıcı girdisi yoksa kendi “başarılı” sayfamıza geri döneriz. Action sınıfınızda bu name’ e
aşağıdaki gibi ulaşırsınız:
va
return mapping.findForward("başarılı");

Girdi kabul eden JSP ActionMapping formu:

<action path="bu sayfayı çağırmak için kullanılan mantıksal yol"


ja

type="action sınıfını yolu" scope="request"


input="actiona ulaşılmasını sağlayan JSP nin yolu"
name=”Action formun adı” >
<forward name="bir isim" path="/JSP nin yolu"/>
</action>
w.

Bunun bir örneği:

<action path="/KullanıcıEkle"
type="com.ogrenci.Action.KullanıcıEkleAction" scope="request"
input="/jsp/KullanıcıEkle.jsp" name=”KullanıcıEkleForm”>
<forward name="başarılı" path="/jsp/KullancıEkle.jsp"/> </action>
ww

Daha önce form çekirdeklerinde belirtilmesi gereken “KullanıcıEkleFormu” nu name niteliği


belirler. Struts’ ta uygulamanızın her modülü için bir ActionForm çekirdeği kullanmanız tavsiye
edilir.

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 17 / 18


m
Not: Bütün örnekler mantıksal olarak düşünüldüğünden okunurluğunun kolay olması açısından
Türkçe karakterler kullanılmıştır.

o
Kaynakça:
http://www.athensgroup.com

i.c
Mastering Jakarta Struts, Wiley publishing

dil
ja va
w.
ww

Ocak 2005, Hacettepe Üniversitesi Bilgisayar Mühendisliği Sayfa 18 / 18

You might also like