Payandalar 2 - Eylemler

Actionsherhangi bir MVC (Model View Controller) çerçevesi için olduğu gibi, Struts2 çerçevesinin çekirdeğidir. Her URL, kullanıcıdan gelen talebe hizmet vermek için gerekli olan işleme mantığını sağlayan belirli bir eylemle eşleştirilir.

Ancak eylem aynı zamanda iki önemli kapasiteye daha hizmet ediyor. İlk olarak eylem, ister JSP isterse başka bir sonuç türü olsun, talepten görünüme veri aktarımında önemli bir rol oynar. İkinci olarak, işlem, isteğe yanıt olarak döndürülecek olan görünümü hangi sonucun oluşturması gerektiğini belirlemede çerçeveye yardımcı olmalıdır.

Eylem Oluştur

Eylemler için tek gereklilik Struts2String veya Result nesnesini döndüren ve bir POJO olması gereken tek bir noargument yöntemi olması gerektiğidir. No-argument yöntemi belirtilmezse, varsayılan davranış execute () yöntemini kullanmaktır.

İsteğe bağlı olarak uzatabilirsiniz ActionSupport dahil altı arabirimi uygulayan sınıf Actionarayüz. Eylem arayüzü aşağıdaki gibidir -

public interface Action {
   public static final String SUCCESS = "success";
   public static final String NONE = "none";
   public static final String ERROR = "error";
   public static final String INPUT = "input";
   public static final String LOGIN = "login";
   public String execute() throws Exception;
}

Merhaba Dünya örneğindeki eylem yöntemine bir göz atalım -

package com.tutorialspoint.struts2;

public class HelloWorldAction {
   private String name;

   public String execute() throws Exception {
      return "success";
   }
   
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

Eylem yönteminin görünümü kontrol ettiği noktayı göstermek için, aşağıdaki değişikliği yapalım. execute yöntemini seçin ve ActionSupport sınıfını aşağıdaki gibi genişletin -

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {
   private String name;

   public String execute() throws Exception {
      if ("SECRET".equals(name)) {
         return SUCCESS;
      } else {
         return ERROR;  
      }
   }
   
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

Bu örnekte, execute yönteminde name özniteliğine bakmak için bazı mantığımız var. Öznitelik dizeye eşitse"SECRET", Geri döndük SUCCESS sonuç olarak aksi takdirde geri döneriz ERRORsonuç olarak. ActionSupport'u genişlettiğimiz için, String sabitlerini kullanabilirizSUCCESSve HATA. Şimdi struts.xml dosyamızı aşağıdaki gibi değiştirelim -

<?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>
   <constant name = "struts.devMode" value = "true" />
   <package name = "helloworld" extends = "struts-default">
      <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction"
         method = "execute">
         <result name = "success">/HelloWorld.jsp</result>
         <result name = "error">/AccessDenied.jsp</result>
      </action>
   </package>
</struts>

Görünüm Oluşturun

Aşağıdaki jsp dosyasını oluşturalım HelloWorld.jsptutulma projenizdeki WebContent klasöründe. Bunu yapmak için proje gezgininde WebContent klasörüne sağ tıklayın veNew >JSP File. Bu dosya, dönüş sonucunun, Eylem arayüzünde tanımlandığı gibi bir String sabiti "başarı" olan BAŞARILI olması durumunda çağrılacaktır -

<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>

<html>
   <head>
      <title>Hello World</title>
   </head>
   
   <body>
      Hello World, <s:property value = "name"/>
   </body>
</html>

Aşağıda, eylem sonucunun ERROR olması durumunda çerçeve tarafından çağrılacak olan dosya, String sabiti "error" a eşittir. Aşağıdakilerin içeriğiAccessDenied.jsp

<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>

<html>  
   <head>
      <title>Access Denied</title>
   </head>
   
   <body>
      You are not authorized to view this page.
   </body>
</html>

Ayrıca yaratmalıyız index.jspWebContent klasöründe. Bu dosya, kullanıcının Struts 2 çerçevesine şunu çağırmasını söylemek için tıklayabileceği ilk eylem URL'si olarak hizmet edecektir.executeHelloWorldAction sınıfının yöntemini ve HelloWorld.jsp görünümünü işleyin.

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
   pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">

<html>  
   <head>
      <title>Hello World</title>
   </head>
   
   <body>
      <h1>Hello World From Struts2</h1>
      <form action = "hello">
         <label for = "name">Please enter your name</label><br/>
         <input type = "text" name = "name"/>
         <input type = "submit" value = "Say Hello"/>
      </form>
   </body>
</html>

İşte bu, web.xml dosyası için herhangi bir değişiklik gerekmiyor, öyleyse içinde oluşturduğumuz web.xml ile aynı kullanalım. Examplesbölüm. Şimdi, çalıştırmaya hazırızHello World Struts 2 çerçevesini kullanarak uygulama.

Uygulamayı yürütün

Proje adına sağ tıklayın ve tıklayın Export > WARSavaş dosyası oluşturmak için dosya. Sonra bu SAVAŞI Tomcat'in webapps dizininde konuşlandırın. Son olarak, Tomcat sunucusunu başlatın ve URL'ye erişmeyi deneyinhttp://localhost:8080/HelloWorldStruts2/index.jsp. Bu size aşağıdaki ekranı verecektir -

"GİZLİ" olarak bir kelime girelim ve aşağıdaki sayfayı görmelisiniz -

Şimdi "SECRET" dışında herhangi bir kelime girin ve aşağıdaki sayfayı görmelisiniz -

Birden Çok Eylem Oluşturun

Farklı istekleri ele almak ve kullanıcılara farklı URL'ler sağlamak için sıklıkla birden fazla eylem tanımlayacaksınız, buna göre aşağıda tanımlandığı gibi farklı sınıflar tanımlayacaksınız -

package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;

class MyAction extends ActionSupport {
   public static String GOOD = SUCCESS;
   public static String BAD = ERROR;
}

public class HelloWorld extends ActionSupport {
   ...
   public String execute() {
      if ("SECRET".equals(name)) return MyAction.GOOD;
      return MyAction.BAD;
   }
   ...
}

public class SomeOtherClass extends ActionSupport {
   ...
   public String execute() {
      return MyAction.GOOD;
   }
   ...
}

Bu eylemleri struts.xml dosyasında aşağıdaki gibi yapılandıracaksınız -

<?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>
   <constant name = "struts.devMode" value = "true" />
   
   <package name = "helloworld" extends = "struts-default">
      <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorld" 
         method = "execute">
         <result name = "success">/HelloWorld.jsp</result>
         <result name = "error">/AccessDenied.jsp</result>
      </action>
      
      <action name = "something" 
         class = "com.tutorialspoint.struts2.SomeOtherClass" 
         method = "execute">
         <result name = "success">/Something.jsp</result>
         <result name = "error">/AccessDenied.jsp</result>
      </action>
   </package>
</struts>

Yukarıdaki varsayımsal örnekte görebileceğiniz gibi, eylem sonuçları SUCCESS ve ERROR’s yineleniyor.

Bu sorunu aşmak için, sonuç sonuçlarını içeren bir sınıf oluşturmanız önerilir.