Struts 2 - Konversi Jenis

Semua yang ada di permintaan HTTP diperlakukan sebagai Stringoleh protokol. Ini termasuk angka, boolean, bilangan bulat, tanggal, desimal, dan lainnya. Namun, di kelas Struts, Anda bisa memiliki properti tipe data apa pun.

Bagaimana Struts melakukan autowire properti untuk Anda?

Struts menggunakan berbagai jenis konverter di bawah penutup untuk melakukan pengangkatan berat.

Misalnya, jika Anda memiliki atribut integer di kelas Action Anda, Struts secara otomatis mengubah parameter request menjadi atribut integer tanpa Anda melakukan apa pun. Secara default, Struts hadir dengan sejumlah konverter tipe

Jika Anda menggunakan salah satu konverter yang tercantum di bawah ini, maka Anda tidak perlu khawatir -

  • Integer, Float, Double, Desimal
  • Tanggal dan Waktu
  • Array dan Koleksi
  • Enumerations
  • Boolean
  • BigDecimal

Pada saat Anda menggunakan tipe data Anda sendiri, Anda perlu menambahkan konverter Anda sendiri agar Struts mengetahui cara mengonversi nilai tersebut sebelum ditampilkan. Pertimbangkan kelas POJO berikutEnvironment.java.

package com.tutorialspoint.struts2;

public class Environment {
   private String name;
   
   public  Environment(String name) {
      this.name = name;
   }
   
   public String getName() {
      return name;
   }
   
   public void setName(String name) {
      this.name = name;
   }
}

Ini adalah kelas yang sangat sederhana yang memiliki atribut bernama name, jadi tidak ada yang istimewa dari kelas ini. Mari kita buat kelas lain yang berisi informasi tentang sistem -SystemDetails.java.

Untuk tujuan latihan ini, saya telah melakukan hardcode Lingkungan ke "Pengembangan" dan Sistem Operasi ke "Windows XP SP3".

Dalam proyek waktu nyata, Anda akan mendapatkan informasi ini dari konfigurasi sistem.

Mari kita memiliki kelas tindakan berikut -

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

public class SystemDetails extends ActionSupport {
   private Environment environment = new Environment("Development");
   private String operatingSystem = "Windows XP SP3";

   public String execute() {
      return SUCCESS;
   }
   
   public Environment getEnvironment() {
      return environment;
   }
   
   public void setEnvironment(Environment environment) {
      this.environment = environment;
   }
   
   public String getOperatingSystem() {
      return operatingSystem;
   }
   
   public void setOperatingSystem(String operatingSystem) {
      this.operatingSystem = operatingSystem;
   }
}

Selanjutnya, mari kita buat file JSP sederhana System.jsp untuk menampilkan informasi Lingkungan dan Sistem Operasi.

<%@ 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>System Details</title>
   </head>
   
   <body>
      Environment: <s:property value = "environment"/><br/>
      Operating System:<s:property value = "operatingSystem"/>
   </body>
</html>

Mari kita kawat system.jsp dan SystemDetails.java kelas bersama menggunakan struts.xml.

Kelas SystemDetails memiliki metode execute () sederhana yang mengembalikan string "SUCCESS".

<?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 = "system" 
            class = "com.tutorialspoint.struts2.SystemDetails" 
            method = "execute">
         <result name = "success">/System.jsp</result>
      </action>
   </package>
</struts>
  • Klik kanan pada nama proyek dan klik Export > WAR File untuk membuat file Perang.

  • Kemudian terapkan WAR ini di direktori webapps Tomcat.

  • Terakhir, jalankan server Tomcat dan coba akses URL http://localhost:8080/HelloWorldStruts2/system.action. Ini akan menghasilkan layar berikut -

Apa yang salah dengan keluaran di atas? Struts tahu bagaimana menampilkan dan mengubah string "Windows XP SP3" dan tipe data bawaan lainnya, tetapi tidak tahu apa yang harus dilakukan dengan properti dariEnvironmentTipe. Itu hanya disebuttoString() metode di kelas

Untuk mengatasi masalah ini, sekarang mari kita membuat dan mendaftar yang sederhana TypeConverter untuk kelas Lingkungan.

Buat kelas bernama EnvironmentConverter.java dengan berikut ini.

package com.tutorialspoint.struts2;

import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;

public class EnvironmentConverter extends StrutsTypeConverter {
   @Override
   public Object convertFromString(Map context, String[] values, Class clazz) {
      Environment env = new Environment(values[0]);
      return env;
   }

   @Override
   public String convertToString(Map context, Object value) {
      Environment env  = (Environment) value;
      return env == null ? null : env.getName();
   }	
}

Itu EnvironmentConverter memperluas StrutsTypeConverter class dan memberi tahu Struts cara mengonversi Environment menjadi String dan sebaliknya dengan mengganti dua metode yaitu convertFromString() dan convertToString().

Sekarang mari kita daftarkan konverter ini sebelum kita menggunakannya dalam aplikasi kita. Ada dua cara untuk mendaftarkan konverter.

Jika konverter hanya akan digunakan dalam tindakan tertentu, maka Anda harus membuat file properti yang perlu dinamai sebagai '[action-class]'converstion.properties.

Dalam kasus kami, kami membuat file bernama SystemDetails-converstion.properties dengan entri pendaftaran berikut -

environment = com.tutorialspoint.struts2.EnvironmentConverter

Dalam contoh di atas, "lingkungan" adalah nama properti di SystemDetails.java kelas dan kami memberi tahu Struts untuk menggunakan EnvironmentConverter untuk mengkonversi ke dan dari properti ini.

Namun, kami tidak akan melakukan ini, Sebaliknya kami akan mendaftarkan konverter ini secara global, sehingga dapat digunakan di seluruh aplikasi. Untuk melakukan ini, buat file properti bernamaxwork-conversion.properties dalam WEBINF/classes folder dengan baris berikut

com.tutorialspoint.struts2.Environment = \
   com.tutorialspoint.struts2.EnvironmentConverter

Ini hanya mendaftarkan konverter secara global, sehingga Strutsdapat secara otomatis melakukan konversi setiap kali menemukan objek dari jenis Lingkungan. Sekarang, jika Anda mengkompilasi ulang dan menjalankan kembali program tersebut, maka Anda akan mendapatkan hasil yang lebih baik sebagai berikut -

Jelas, sekarang hasilnya akan lebih baik yang berarti konverter Struts kami berfungsi dengan baik.

Ini adalah bagaimana Anda dapat membuat beberapa konverter dan mendaftarkannya untuk digunakan sesuai kebutuhan Anda.