6. Örnek 05 – Giriş Formu
Basit bir örnekle veri girişi formu kavramını tanıtacağız.
6.1. NetBeans projesi
![]() |
[1] dosyasında yer alan proje:
- [Saisie.JSP] ve [Confirmation.JSP] görünümleri
- [struts.xml] yapılandırma dosyası
- mesaj dosyası [messages.properties]
- [Confirmer.java] eylemi
[2]'te, giriş sayfası
6.2. Configuration
[struts.xml] dosyası şöyledir:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- uluslararasılaştırma -->
<constant name="struts.custom.i18n.resources" value="messages" />
<!-- varsayılan paket -->
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<action name="index">
<result type="redirectAction">
<param name="actionName">Saisir</param>
<param name="namespace">/actions</param>
</result>
</action>
</package>
<!-- paket eylemleri -->
<package name="actions" namespace="/actions" extends="struts-default">
<action name="Saisir">
<result name="success">/vues/Saisie.JSP</result>
</action>
<action name="Confirmer" class="actions.Confirmer">
<result name="success">/vues/Confirmation.JSP</result>
</action>
</package>
</struts>
- 20. satır: URL eyleminin /actions/Action paketidir.
- 21-23. satırlar: [Saisir] eylemini tanımlar. Bu eyleme hiçbir sınıf atanmamıştır. Yanıt her zaman [/vues/Saisie.JSP] görünümüdür
- 24-26. satırlar: [Confirmer] eylemini tanımlar. Bu eyleme [actions.Confirmer] sınıfı atanmıştır. Yanıt her zaman [/vues/Confirmation.JSP] görünümüdür
6.3. [Confirmer] eylemi
Kodu şu şekildedir:
package actions;
import com.opensymphony.xwork2.ActionSupport;
public class Confirmer extends ActionSupport{
// şablon
private String nom;
// alıcı ve ayarlayıcılar
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
}
Sınıfın tek bir alanı vardır; bu, 8. satırda yer alan ve get / set yöntemlerine sahip alandır.
6.4. Mesaj dosyası
[messages.properties] dosyasının içeriği şöyledir:
saisie.texte=Formulaire de saisie
saisie.titre1=Saisie
saisie.titre2=Saisie
saisie.libelle=Tapez votre nom
saisie.valider=Valider
confirm.titre1=Confirmation
confirm.titre2=Confirmation
confirm.texte=Bonjour
confirm.retour=Retour au formulaire de saisie
Bu mesaj anahtarları, [Saisie.JSP] ve [Confirmation.JSP] adlı iki görünümde kullanılır.
6.5. Görünümler
6.5.1. [Saisie.JSP] görünümü
Görsel olarak şu şekildedir:
![]() |
Kaynak kodu şu şekildedir:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><s:text name="saisie.titre1"/></title>
</head>
<body>
<h1><s:text name="saisie.titre2"/></h1>
<s:form action="Confirmer">
<s:textfield key="saisie.libelle" name="nom"/>
<s:submit key="saisie.valider" action="Confirmer"/>
</s:form>
</body>
</html>
- 7. satır: saisie.titre1 (Giriş) [1] anahtar mesajını görüntüler.
- 10. satır: saisie.titre2 (Giriş) [2] anahtar mesajını görüntüler.
- 11. ve 14. satırlar: <s:form> etiketi bir HTML formunu başlatır. Bu formun içindeki tüm girdiler web sunucusuna gönderilecektir. Bunların postées olduğu söylenir, çünkü sunucuya veri gönderiminde yer alan HTTP işlemi POST olarak adlandırılır. Gönderilen veriler param1=valeur1¶m2=valeur2& biçiminde bir karakter dizisi olarak gönderilir... Bu dizeyle daha önce Örnek 02’nin 3.5. paragrafında karşılaşmıştık. Her iki durumda da, parametre dizesi Struts 2 tarafından aynı şekilde işlenir. parami parametrelerinin valeuri değerleri, yürütülen eyleme, parami parametreleriyle aynı isimleri taşıyan alanlara enjekte edilir. Gönderilen veriler kime gönderilir? Varsayılan olarak, formu görüntüleyen eyleme, bu örnekte Saisir [5] eylemine gönderilir. Ayrıca, action özniteliğini kullanarak başka bir eylem belirtebiliriz; bu örnekte [Confirmer] eylemi.
- 12. satır: <s:textfield ...> etiketi, [3] giriş alanını görüntüler. Bu etiketin key özniteliği, giriş alanının solunda görüntülenecek etiketin anahtarını belirtir. Dolayısıyla etiket, [messages.properties] dosyasında aranır. name özniteliği, gönderilecek parametrenin adıdır. Bu parametreye atanan değer, giriş alanına girilen metin olacaktır.
- 13. satır: <s:submit ...> etiketi, [4] düğmesini görüntüler. Bu etiketin key özniteliği, düğmede görüntülenecek etiketin anahtarını belirtir. Dolayısıyla bu etiket, [messages.properties] dosyasında aranır. submit türündeki bir düğme, formun POST eylemini tetikler. Yukarıda, <s:form> etiketinin action özniteliği nedeniyle bu eylemin [Confirmer] olduğunu belirtmiştik. <s:submit> etiketinin action özniteliği, gerekirse başka bir eylemin belirtilmesine olanak tanır. Burada [Confirmer] eylemini belirledik. Düğmenin varsayılan parametre adı şöyledir: action:nom_action; burada action:Confirmer. Bu parametreye atanan değer, düğmenin etiketidir. Sonuç olarak, kullanıcı [Valider] düğmesine tıkladığında [Confirmer] eylemine gönderilen parametre dizisi şu şekilde olacaktır:
?nom=xx&action:Confirmer=Valider.
burada xx, kullanıcının giriş alanına yazdığı metindir.
6.5.2. [Confirmation.JSP] görünümü
Görsel olarak şu şekildedir:
![]() |
Bir isim girip giriş sayfasını onaylıyoruz. Ardından, [1] yanıtını alıyoruz; bu, [Confirmation.JSP] görünümüne ait yanıt. [2] sayfasında görüntülenen URL, [Confirmer] eylemine aittir. Yukarıdaki örnekte, aşağıdaki karakter dizisi gönderilmiştir:
action:Confirmer parametresi, Struts 2'nin isteği doğru eyleme, bu örnekte [Confirmer] eylemine yönlendirmesini sağlar. nom parametresinin değeri, nom eyleminin [Confirmer] alanına enjekte edilecektir.
[Confirmation.JSP] eyleminin kaynak kodu şöyledir:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><s:text name="confirm.titre1"/></title>
</head>
<body>
<h1><s:text name="confirm.titre2"/></h1>
<s:text name="confirm.texte"/>
<s:property value="nom"/> !
<br/><br/>
<a href="<s:url action="Saisir"/>"><s:text name="confirm.retour"/></a>
</body>
</html>
- 7. satır: [1] mesaj dosyasında bulunan confirm.titre1 anahtar etiketini görüntüler
- 10. satır: [3] mesaj dosyasında bulunan confirm.titre2 anahtar etiketini görüntüler
- 12. satır: Yürütülen [Confirmer] eyleminin nom özelliğini görüntüler.
- 14. satır: [Saisir] eylemine bir bağlantı oluşturur. Daha önce karşılaşılan <s:url>, etiketi, tarayıcının URL ve [2] etiketlerinden oluşturulacaktır. Yol, [2] ve http://localhost:8084/exemple-05/actions'in yolu olacak ve eylem, action özniteliğindeki gibi, burada Saisir olacaktır. Dolayısıyla, bağlantının URL değeri http://localhost:8084/exemple-05/actions/Saisir.action olacaktır. Bağlantının metni, confirm.retour [4] anahtarıyla ilişkili etiket olacaktır.
6.6. Testler
İşte iki sorgu:
![]() |
[1]'te bir ad girip onaylıyoruz. [2]'te ise onay sayfası.
![]() |
[3]'te forma geri dönme bağlantısını takip ediyoruz. [4]'te sonuç. Her şey açıklandı, ancak [3]'ten [4]'e geçiş hariç. Neden [4]'te girdiğimiz isim görünmüyor?
[3] bağlantısı, URL'e ve [http://localhost:8084/exemple-05/actions/Saisir.action]'e yönlendiren bir bağlantıdır. Dolayısıyla [Saisir] eylemi gerçekleştirilir. [struts.xml]'teki yapılandırmasına bir göz atalım:
<package name="actions" namespace="/actions" extends="struts-default">
<action name="Saisir">
<result name="success">/vues/Saisie.JSP</result>
</action>
<action name="Confirmer" class="actions.Confirmer">
<result name="success">/vues/Confirmation.JSP</result>
</action>
</package>
[Saisir] eylemi herhangi bir eylemle ilişkilendirilmemiştir. Dolayısıyla [Saisie.JSP] görünümü hemen görüntülenir. Bu görünümün koduna bir göz atalım:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><s:text name="saisie.titre1"/></title>
</head>
<body>
<h1><s:text name="saisie.titre2"/></h1>
<s:form>
<s:textfield key="saisie.libelle" name="nom"/>
<s:submit key="saisie.valider" action="Confirmer"/>
</s:form>
</body>
</html>
- satırda, giriş alanı görüntülenir. İçeriği, nom (name) özelliği ile başlatılır. <s:property> etiketinin işleyişi hakkında yukarıda yazılanları hatırlayalım:
<s:property name="özellik"> etiketiyle, ActionContext adlı bir nesnenin bir özelliğinin değeri yazılabilir. Bu nesnede şunlar bulunur:
- yürütülen eylemle ilişkili sınıfın özellikleri.
- <s:property name="#request['clé']"> olarak belirtilen mevcut isteğin öznitelikleri
- <s:property name="#session['clé']"> ile belirtilen kullanıcı oturumunun öznitelikleri
- uygulamanın kendisinin <s:property name="#application['clé']"> olarak belirtilen özellikleri
- istemci tarayıcısı tarafından gönderilen parametreler <s:property name="#parameters['clé']"> şeklinde gösterilir
- <s:property name="#attr['clé']"> biçimindeki notasyon, sırasıyla sayfada, istekte, oturumda ve uygulamada aranan bir nesnenin değerini gösterir.
Burada 1. durum söz konusudur. [Saisir] eyleminin ilişkili bir sınıfı yoktur. Dolayısıyla nom özelliği mevcut değildir. Bu durumda giriş alanına boş bir dize görüntülenir.
[1]'te girilen adı [4]'te görüntülemek için, kullanıcının oturumunu kullanacağız.




