Struts 2 - Tumpukan Nilai / OGNL

Tumpukan Nilai

Tumpukan nilai adalah sekumpulan beberapa objek yang menjaga objek berikut dalam urutan yang disediakan -

Sr Tidak Objek & Deskripsi
1

Temporary Objects

Ada berbagai objek sementara yang dibuat selama eksekusi halaman. Misalnya nilai iterasi saat ini untuk koleksi yang diulangi dalam tag JSP.

2

The Model Object

Jika Anda menggunakan objek model dalam aplikasi struts Anda, objek model saat ini ditempatkan sebelum tindakan pada tumpukan nilai.

3

The Action Object

Ini akan menjadi objek tindakan saat ini yang sedang dieksekusi.

4

Named Objects

Objek ini termasuk #application, #session, #request, #attr dan #parameters dan merujuk ke cakupan servlet terkait.

Tumpukan nilai dapat diakses melalui tag yang disediakan untuk JSP, Velocity atau Freemarker. Ada berbagai tag yang akan kita pelajari dalam bab terpisah, digunakan untuk mendapatkan dan mengatur tumpukan nilai struts 2.0. Anda bisa mendapatkan objek valueStack di dalam tindakan Anda sebagai berikut -

ActionContext.getContext().getValueStack()

Setelah Anda memiliki objek ValueStack, Anda dapat menggunakan metode berikut untuk memanipulasi objek itu -

Sr Tidak Metode & Deskripsi ValueStack
1

Object findValue(String expr)

Temukan nilai dengan mengevaluasi ekspresi yang diberikan terhadap tumpukan dalam urutan pencarian default.

2

CompoundRoot getRoot()

Dapatkan CompoundRoot yang menahan objek yang didorong ke tumpukan.

3

Object peek()

Tempatkan objek di atas tumpukan tanpa mengubah tumpukan.

4

Object pop()

Tempatkan objek di atas tumpukan dan keluarkan dari tumpukan.

5 void push(Object o)

Letakkan benda ini di atas tumpukan.

6

void set(String key, Object o)

Menetapkan objek pada tumpukan dengan kunci yang diberikan sehingga dapat diambil kembali oleh findValue (key, ...)

7

void setDefaultType(Class defaultType)

Menyetel jenis default untuk dikonversi jika tidak ada jenis yang diberikan saat mendapatkan nilai.

8

void setValue(String expr, Object value)

Mencoba menyetel properti pada kacang dalam tumpukan dengan ekspresi yang diberikan menggunakan urutan pencarian default.

9

int size()

Dapatkan jumlah objek di tumpukan.

OGNL

Itu Object-Graph Navigation Language(OGNL) adalah bahasa ekspresi yang kuat yang digunakan untuk mereferensikan dan memanipulasi data di ValueStack. OGNL juga membantu dalam transfer data dan konversi tipe.

OGNL sangat mirip dengan JSP Expression Language. OGNL didasarkan pada gagasan memiliki root atau objek default dalam konteksnya. Properti objek default atau root dapat direferensikan menggunakan notasi markup, yang merupakan simbol pagar.

Seperti yang disebutkan sebelumnya, OGNL didasarkan pada konteks dan Struts membuat peta ActionContext untuk digunakan dengan OGNL. Peta ActionContext terdiri dari:

  • Application - Variabel cakupan aplikasi

  • Session - Variabel cakupan sesi

  • Root / value stack - Semua variabel tindakan Anda disimpan di sini

  • Request - Minta variabel cakupan

  • Parameters - Parameter permintaan

  • Atributes - Atribut yang disimpan di halaman, permintaan, sesi dan ruang lingkup aplikasi

Penting untuk dipahami bahwa objek Action selalu tersedia di tumpukan nilai. Jadi, oleh karena itu, jika objek Action Anda memiliki properti“x” dan “y” ada tersedia untuk Anda gunakan.

Objek di ActionContext dirujuk menggunakan simbol pagar, namun, objek dalam tumpukan nilai bisa langsung direferensikan.

Misalnya, jika employee adalah properti kelas tindakan, maka dapat dirujuk sebagai berikut -

<s:property value = "name"/>

dari pada

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

Jika Anda memiliki atribut dalam sesi yang disebut "login", Anda dapat mengambilnya sebagai berikut -

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

OGNL juga mendukung penanganan koleksi - yaitu Peta, Daftar, dan Set. Misalnya untuk menampilkan daftar dropdown warna, Anda dapat melakukan -

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

Ekspresi OGNL pandai menafsirkan "merah", "kuning", "hijau" sebagai warna dan menyusun daftar berdasarkan itu.

Ekspresi OGNL akan digunakan secara ekstensif di bab berikutnya saat kita akan mempelajari tag yang berbeda. Jadi daripada melihatnya secara terpisah, mari kita lihat menggunakan beberapa contoh di bagian Tag Formulir / Tag Kontrol / Tag Data dan Tag Ajax.

Contoh ValueStack / OGNL

Buat Tindakan

Mari kita pertimbangkan kelas tindakan berikut di mana kita mengakses valueStack dan kemudian mengatur beberapa kunci yang akan kita akses menggunakan OGNL dalam tampilan kita, yaitu halaman JSP.

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;
   }
}

Sebenarnya, Struts 2 menambahkan tindakan Anda ke bagian atas valueStack saat dijalankan. Jadi, cara yang biasa untuk meletakkan barang di Value Stack adalah menambahkan getter / setter untuk nilai ke kelas Action Anda dan kemudian menggunakan tag <s: property> untuk mengakses nilai. Tapi saya menunjukkan kepada Anda bagaimana tepatnya ActionContext dan ValueStack bekerja di struts.

Buat Tampilan

Mari kita buat file jsp di bawah ini HelloWorld.jspdi folder WebContent di proyek eclipse Anda. Tampilan ini akan ditampilkan jika tindakan kembali berhasil -

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

Kami juga perlu menciptakan index.jsp di folder WebContent yang isinya sebagai berikut -

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

File Konfigurasi

Berikut ini adalah konten dari struts.xml file -

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

Berikut ini adalah konten dari web.xml file -

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

Klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat.

Terakhir, jalankan server Tomcat dan coba akses URL http://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan menghasilkan layar berikut

Sekarang masukkan kata apa saja ke dalam kotak teks yang diberikan dan klik tombol "Say Hello" untuk menjalankan tindakan yang ditentukan. Sekarang, jika Anda akan memeriksa log yang dihasilkan, Anda akan menemukan teks berikut di bagian bawah -

Size of the valueStack: 3

Ini akan menampilkan layar berikut, yang akan menampilkan nilai apa pun yang akan Anda masukkan dan nilai key1 dan key2 yang telah kami masukkan ke ValueStack.