7. Örnek 05B – Giriş formunda gezinme
Girilen verileri bir eyleme göndermek (submit) için birkaç düğme içeren bir formu inceliyoruz.
![]() |
7.1. NetBeans projesi
NetBeans projesi şu şekildedir:
![]() |
Projenin bileşenleri şunlardır:
- [DoSomething.JSP]: Üç gezinme düğmesi ve bir bağlantı içeren uygulamanın tek görünümü.
- [DoSomething.java] ve [DoSomethingElse.java]: projenin iki eylemi
- [messages.properties]: uluslararasılaştırılmış mesaj dosyası
- [struts.xml]: Struts 2 yapılandırma dosyası
7.2. Configuration
Aşağıdaki [struts.xml] dosyası uygulamayı yapılandırır:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="messages" />
<package name="actions" namespace="/actions" extends="struts-default">
<action name="DoSomething" class="actions.DoSomething">
<result name="success">/vues/DoSomething.JSP</result>
</action>
<action name="DoSomethingElse" class="actions.DoSomethingElse">
<result name="success">/vues/DoSomething.JSP</result>
</action>
</package>
</struts>
- [/actions/DoSomething] eylemi, [actions.DoSomething] sınıfının örneklenmesine neden olacak ve varsayılan olarak execute yöntemi çalıştırılacaktır. [Something] eylemine aktarılan parametrelerde başka bir yöntem belirtilirse bu varsayılan ayar geçersiz kılınabilir. Hangi yöntem yürütülürse yürütülsün, yalnızca bu anahtar tanımlandığından success gezinme anahtarını döndürmesi gerekir. Böylece [DoSomething.JSP] görünümü görüntülenecektir.
- [/actions/DoSomethingElse] eyleminin yapılandırması da aynıdır.
7.3. Mesaj dosyası
[messages.properties] mesaj dosyası şu şekildedir:
formulaire.titre1=Actions et M\u00e9thodes
formulaire.titre2=Actions et M\u00e9thodes
formulaire.execute=DoSomething.execute
formulaire.action1=DoSomething.action1
formulaire.action2=DoSomethingElse.action2
formulaire.action3=DoSomething.action3
7.4. [DoSomething.JSP] görünümü
[DoSomething.JSP] görünümü şöyledir:
![]() |
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="formulaire.titre1"/></title>
</head>
<body>
<h1><s:text name="formulaire.titre2"/></h1>
<s:form action="DoSomething">
<s:submit key="formulaire.execute"/>
<s:submit key="formulaire.action1" method="action1"/>
<s:submit key="formulaire.action2" action="DoSomethingElse" method="action2"/>
</s:form>
<s:url id="URL" action="DoSomething" method="action3"/>
<s:a href="%{URL}"><s:text name="formulaire.action3"/></s:a>
</body>
</html>
- 11. satır: Form, [DoSomething] eylemine gönderilecektir. Bu, mutlaka bu eylemin tetikleneceği anlamına gelmez. Bu, POST için kullanılan submit düğmesine bağlıdır.
- 12. satır: submit düğmesi ne bir eylem ne de bir yöntem belirtir. <form> etiketiyle belirtilen [DoSomething] eylemi örneklenecektir. Yürütülecek yöntem, [struts.xml] dosyasında tanımlanan execute yöntemidir.
- 13. satır: submit düğmesi bir yöntem belirtir. <form> etiketiyle belirtilen [DoSomething] eylemi örneklenecektir. Yürütülecek yöntem, action1 yöntemidir.
- 14. satır: submit düğmesi bir eylemi ve bir yöntemi belirtir. Burada [DoSomethingElse] eylemi örneklenecektir. Yürütülecek yöntem ise action2 yöntemidir.
- 16-17. satırlar: [DoSomething] eylemine ve action3 yöntemine bir bağlantı. [DoSomething] eylemi örneklenecek ve action3 yöntemi yürütülecektir. submit düğmelerinden farklı olarak, bağlantıya tıklandığında POST değil, GET tetiklenir. Dolayısıyla, hiçbir parametre gönderilmez.
URL [http://localhost:8084/exemple-05B/actions/DoSomething.action] çağrıldığında bu kod tarafından oluşturulan HTML kodu şöyledir:
- 9. satır: HTML formundaki form etiketi. action özniteliği, form parametrelerinin gönderileceği URL'i belirtir. Bu URL, [DoSomething] eylemine aittir.
- 11., 13. ve 15. satırlar: Düğmelerin name öznitelikleri, submit düğmesinin hedef eylemine gönderilecektir. Bu, Struts'un hangi eylemi örneklendireceğini ve hangi yöntemi çalıştıracağını belirlemesini sağlar.
- 13. satır: name=method:action1 özniteliği, DoSomething.action1 yönteminin çalıştırılması gerektiğini belirtir.
- 15. satır: name= action:DoSomethingElse!action2 özniteliği, DoSomethingElse.action2 yönteminin çalıştırılması gerektiğini belirtir.
- 11. satır: name= formulaire.execute özniteliği ne bir eylem ne de bir yöntem belirtmektedir. Dolayısıyla, DoSomething.execute yöntemi yürütülecektir.
- 19. satır: Bağlantı, DoSomething.action3 yönteminin çalıştırılmasını açıkça talep eder
7.5. Eylemler
[DoSomething] eylemi şöyledir:
package actions;
import com.opensymphony.xwork2.ActionSupport;
public class DoSomething extends ActionSupport {
public DoSomething() {
System.out.println("DoSomething");
}
@Override
public String execute() {
System.out.println("DoSomething.execute");
return SUCCESS;
}
public String action1() {
System.out.println("DoSomething.action1");
return SUCCESS;
}
public String action3() {
System.out.println("DoSomething.action3");
return SUCCESS;
}
}
- execute, action1 ve action3 yöntemleri, web sunucusunun konsoluna yazdırır ve success gezinme anahtarını döndürür.
- 8. satır: Oluşturucu ayrıca web sunucusunun konsoluna da yazdırır
Konsola yazılan farklı mesajlar, bir istek sırasında hangi yöntemlerin yürütüldüğünü anlamamızı sağlar.
[DoSomethingElse] eylemi de benzerdir:
package actions;
import com.opensymphony.xwork2.ActionSupport;
public class DoSomethingElse extends ActionSupport {
public DoSomethingElse() {
System.out.println("DoSomethingElse");
}
@Override
public String execute() {
System.out.println("DoSomethingElse.execute");
return SUCCESS;
}
public String action2() {
System.out.println("DoSomethingElse.action2");
return SUCCESS;
}
}
7.6. Testler
Testler şu sonuçları göstermektedir (web sunucusunun konsolunda):
- [DoSomething.execute] düğmesine tıklandığında, [DoSomething] eylemi başlatılır ve bu eylemin execute yöntemi yürütülür.
- [DoSomething.action1] düğmesine tıklandığında, [DoSomething] eylemi başlatılır ve action1 yöntemi yürütülür.
- [DoSomethingElse.action2] düğmesine tıklandığında, [DoSomethingElse] eylemi örneklenir ve action2 yöntemi yürütülür.
- [DoSomething.action3] bağlantısına tıklandığında, [DoSomething] eylemi örneklenir ve action3 yöntemi yürütülür.

