Struts 2 - Değer Yığını / OGNL

Değer Yığını

Değer yığını, aşağıdaki nesneleri verilen sırada tutan birkaç nesneden oluşan bir kümedir:

Sr.No Nesneler ve Açıklama
1

Temporary Objects

Bir sayfanın yürütülmesi sırasında oluşturulan çeşitli geçici nesneler vardır. Örneğin, bir JSP etiketinde döngüye alınan bir koleksiyon için geçerli yineleme değeri.

2

The Model Object

Struts uygulamanızda model nesneleri kullanıyorsanız, geçerli model nesnesi değer yığınındaki eylemden önce yerleştirilir.

3

The Action Object

Bu, yürütülmekte olan mevcut eylem nesnesi olacaktır.

4

Named Objects

Bu nesneler #application, #session, #request, #attr ve # parametrelerini içerir ve karşılık gelen sunucu uygulaması kapsamlarına atıfta bulunur.

Değer yığınına JSP, Velocity veya Freemarker için sağlanan etiketler aracılığıyla erişilebilir. Ayrı bölümlerde inceleyeceğimiz, struts 2.0 değer yığınını elde etmek ve ayarlamak için kullanılan çeşitli etiketler vardır. Aşağıdaki gibi eyleminizin içinde valueStack nesnesi alabilirsiniz -

ActionContext.getContext().getValueStack()

Bir ValueStack nesnesine sahip olduğunuzda, bu nesneyi değiştirmek için aşağıdaki yöntemleri kullanabilirsiniz -

Sr.No ValueStack Yöntemleri ve Açıklaması
1

Object findValue(String expr)

Varsayılan arama düzeninde, verilen ifadeyi yığına göre değerlendirerek bir değer bulun.

2

CompoundRoot getRoot()

Yığına itilen nesneleri tutan CompoundRoot'u alın.

3

Object peek()

Yığını değiştirmeden nesneyi yığının en üstüne getirin.

4

Object pop()

Yığının en üstündeki nesneyi alın ve yığından çıkarın.

5 void push(Object o)

Bu nesneyi yığının üstüne koyun.

6

void set(String key, Object o)

Yığın üzerindeki bir nesneyi verilen anahtarla ayarlar, böylece findValue (anahtar, ...) ile geri alınabilir.

7

void setDefaultType(Class defaultType)

Bir değer alınırken tür sağlanmazsa dönüştürülecek varsayılan türü ayarlar.

8

void setValue(String expr, Object value)

Varsayılan arama sırasını kullanarak verilen ifadeyle yığındaki bir çekirdek üzerinde bir özellik belirlemeye çalışır.

9

int size()

Yığındaki nesnelerin sayısını öğrenin.

OGNL

Object-Graph Navigation Language(OGNL), ValueStack'teki verilere referans vermek ve bunları işlemek için kullanılan güçlü bir ifade dilidir. OGNL ayrıca veri aktarımı ve tür dönüştürmeye yardımcı olur.

OGNL, JSP İfade Diline çok benzer. OGNL, bağlam içinde bir kök veya varsayılan nesneye sahip olma fikrine dayanır. Varsayılan veya kök nesnenin özelliklerine, pound sembolü olan biçimlendirme notasyonu kullanılarak başvurulabilir.

Daha önce belirtildiği gibi, OGNL bir bağlama dayanır ve Struts, OGNL ile kullanılmak üzere bir ActionContext haritası oluşturur. ActionContext haritası aşağıdakilerden oluşur -

  • Application - Uygulama kapsamlı değişkenler

  • Session - Oturum kapsamlı değişkenler

  • Root / value stack - Tüm eylem değişkenleriniz burada saklanır

  • Request - Kapsamlı değişkenler isteyin

  • Parameters - İstek parametreleri

  • Atributes - Sayfa, istek, oturum ve uygulama kapsamında depolanan özellikler

Action nesnesinin her zaman değer yığınında mevcut olduğunu anlamak önemlidir. Dolayısıyla, Action nesnenizin özellikleri varsa“x” ve “y” kullanıma hazırdır.

ActionContext'teki nesnelere pound sembolü kullanılarak başvurulur, ancak değer yığınındaki nesnelere doğrudan başvurulabilir.

Örneğin, eğer employee bir eylem sınıfının özelliğidir, bu durumda aşağıdaki gibi başvurulabilir -

<s:property value = "name"/>

onun yerine

<s:property value = "#name"/>

Oturumda "oturum açma" adlı bir özniteliğiniz varsa, bunu aşağıdaki şekilde alabilirsiniz -

<s:property value = "#session.login"/>

OGNL ayrıca, Harita, Liste ve Küme koleksiyonlarıyla ilgilenmeyi de destekler. Örneğin, bir açılır renk listesi görüntülemek için şunları yapabilirsiniz:

<s:select name = "color" list = "{'red','yellow','green'}" />

OGNL ifadesi, "kırmızı", "sarı", "yeşil" i renkler olarak yorumlamak ve buna göre bir liste oluşturmak için akıllıdır.

OGNL ifadeleri, farklı etiketleri inceleyeceğimiz sonraki bölümlerde yoğun bir şekilde kullanılacaktır. Dolayısıyla, bunlara tek başına bakmaktansa, Form Etiketleri / Kontrol Etiketleri / Veri Etiketleri ve Ajax Etiketleri bölümündeki bazı örnekleri kullanarak bakalım.

ValueStack / OGNL Örneği

Eylem Oluştur

ValueStack'e eriştiğimiz aşağıdaki eylem sınıfını düşünelim ve ardından OGNL'yi kullanarak erişeceğimiz birkaç anahtarı, yani JSP sayfasını ayarlayalım.

package com.tutorialspoint.struts2;

import java.util.*; 

import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {
   private String name;

   public String execute() throws Exception {
      ValueStack stack = ActionContext.getContext().getValueStack();
      Map<String, Object> context = new HashMap<String, Object>();

      context.put("key1", new String("This is key1")); 
      context.put("key2", new String("This is key2"));
      stack.push(context);

      System.out.println("Size of the valueStack: " + stack.size());
      return "success";
   }  

   public String getName() {
      return name;
   }

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

Aslında, Struts 2, çalıştırıldığında eyleminizi valueStack'in tepesine ekler. Dolayısıyla, Değer Yığını'na bir şeyler yerleştirmenin genel yolu, Action sınıfınıza değerler için alıcılar / ayarlayıcılar eklemek ve ardından değerlere erişmek için <s: property> etiketini kullanmaktır. Ama size ActionContext ve ValueStack'in desteklerde tam olarak nasıl çalıştığını gösteriyorum.

Görünümler Oluşturun

Aşağıdaki jsp dosyasını oluşturalım HelloWorld.jsptutulma projenizdeki WebContent klasöründe. İşlemin başarılı olması durumunda bu görünüm görüntülenecektir -

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

<html>
   <head>
      <title>Hello World</title>
   </head>
   
   <body>
      Entered value : <s:property value = "name"/><br/>
      Value of key 1 : <s:property value = "key1" /><br/>
      Value of key 2 : <s:property value = "key2" /> <br/>
   </body>
</html>

Ayrıca yaratmalıyız index.jsp içeriği aşağıdaki gibi olan WebContent klasöründe -

<%@ 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>

Yapılandırma Dosyaları

Aşağıdakilerin içeriği struts.xml dosya -

<?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>
      </action>

   </package>
</struts>

Aşağıdakilerin içeriği web.xml dosya -

<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns = "http://java.sun.com/xml/ns/javaee" 
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id = "WebApp_ID" version = "3.0">
   
   <display-name>Struts 2</display-name>
   
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
   
   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>

Proje adına sağ tıklayın ve tıklayın Export > WAR FileSavaş dosyası oluşturmak için. Ardından bu SAVAŞI Tomcat'in webapps dizinine yerleştirin.

Son olarak, Tomcat sunucusunu başlatın ve URL'ye erişmeyi deneyin http://localhost:8080/HelloWorldStruts2/index.jsp. Bu, aşağıdaki ekranı oluşturacaktır

Şimdi verilen metin kutusuna herhangi bir kelime girin ve tanımlanan eylemi yürütmek için "Merhaba Deyin" düğmesini tıklayın. Şimdi, oluşturulan günlüğü kontrol ederseniz, aşağıdaki metni altta bulacaksınız -

Size of the valueStack: 3

Bu, gireceğiniz değeri ve ValueStack'e koyduğumuz key1 ve key2'nin değerini görüntüleyen aşağıdaki ekranı görüntüleyecektir.