Streben 2 - Typkonvertierung

Alles in einer HTTP-Anfrage wird als behandelt Stringdurch das Protokoll. Dies umfasst Zahlen, Boolesche Werte, Ganzzahlen, Datumsangaben, Dezimalstellen und alles andere. In der Struts-Klasse können Sie jedoch Eigenschaften für beliebige Datentypen haben.

Wie verdrahtet Struts die Eigenschaften automatisch für Sie?

Struts verwendet eine Vielzahl von Konvertern unter der Abdeckung, um das schwere Heben durchzuführen.

Wenn Ihre Action-Klasse beispielsweise ein Integer-Attribut enthält, konvertiert Struts den Anforderungsparameter automatisch in das Integer-Attribut, ohne dass Sie etwas unternehmen. Standardmäßig wird Struts mit einer Reihe von Typkonvertern geliefert

Wenn Sie einen der unten aufgeführten Konverter verwenden, müssen Sie sich keine Sorgen machen -

  • Integer, Float, Double, Decimal
  • Datum und Uhrzeit
  • Arrays und Sammlungen
  • Enumerations
  • Boolean
  • BigDecimal

In Zeiten, in denen Sie Ihren eigenen Datentyp verwenden, müssen Sie eigene Konverter hinzufügen, damit Struts vor der Anzeige weiß, wie diese Werte konvertiert werden. Betrachten Sie die folgende POJO-KlasseEnvironment.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;
   }
}

Dies ist eine sehr einfache Klasse mit einem Attribut namens name, also nichts besonderes an dieser Klasse. Erstellen wir eine weitere Klasse, die Informationen zum System enthält -SystemDetails.java.

Für diese Übung habe ich die Umgebung auf "Entwicklung" und das Betriebssystem auf "Windows XP SP3" fest codiert.

In einem Echtzeitprojekt würden Sie diese Informationen aus der Systemkonfiguration erhalten.

Lassen Sie uns die folgende Aktionsklasse haben -

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

Als nächstes erstellen wir eine einfache JSP-Datei System.jsp um die Umgebungs- und Betriebssysteminformationen anzuzeigen.

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

Lassen Sie uns die verdrahten system.jsp und die SystemDetails.java Klasse zusammen mit struts.xml.

Die SystemDetails-Klasse verfügt über eine einfache execute () -Methode, die die Zeichenfolge "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>
  • Klicken Sie mit der rechten Maustaste auf den Projektnamen und klicken Sie auf Export > WAR File um eine War-Datei zu erstellen.

  • Stellen Sie diese WAR dann im Webanwendungsverzeichnis von Tomcat bereit.

  • Starten Sie abschließend den Tomcat-Server und versuchen Sie, auf die URL zuzugreifen http://localhost:8080/HelloWorldStruts2/system.action. Daraufhin wird der folgende Bildschirm angezeigt:

Was ist falsch an der obigen Ausgabe? Struts weiß, wie die Zeichenfolge "Windows XP SP3" und andere integrierte Datentypen angezeigt und konvertiert werden, weiß jedoch nicht, was mit der Eigenschaft von zu tun istEnvironmentArt. Es heißt einfachtoString() Methode für die Klasse

Um dieses Problem zu beheben, erstellen und registrieren wir jetzt eine einfache TypeConverter für die Klasse Umwelt.

Erstellen Sie eine Klasse namens EnvironmentConverter.java mit den folgenden.

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

Das EnvironmentConverter erweitert die StrutsTypeConverter Klasse und teilt Struts mit, wie die Umgebung in einen String konvertiert werden soll und umgekehrt, indem zwei Methoden überschrieben werden convertFromString() und convertToString().

Lassen Sie uns diesen Konverter jetzt registrieren, bevor wir ihn in unserer Anwendung verwenden. Es gibt zwei Möglichkeiten, einen Konverter zu registrieren.

Wenn der Konverter nur in einer bestimmten Aktion verwendet wird, müssen Sie eine Eigenschaftendatei erstellen, die als benannt werden muss '[action-class]'converstion.properties.

In unserem Fall erstellen wir eine Datei mit dem Namen SystemDetails-converstion.properties mit folgendem Registrierungseintrag -

environment = com.tutorialspoint.struts2.EnvironmentConverter

Im obigen Beispiel ist "Umgebung" der Name der Eigenschaft in der SystemDetails.java Klasse und wir sagen Struts, die zu verwenden EnvironmentConverter zum Konvertieren von und zu dieser Eigenschaft.

Wir werden dies jedoch nicht tun. Stattdessen werden wir diesen Konverter global registrieren, damit er in der gesamten Anwendung verwendet werden kann. Erstellen Sie dazu eine Eigenschaftendatei mit dem Namenxwork-conversion.properties in dem WEBINF/classes Ordner mit der folgenden Zeile

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

Dadurch wird der Konverter einfach global registriert, so dass Strutskann die Konvertierung jedes Mal automatisch durchführen, wenn sie auf ein Objekt vom Typ Umgebung stößt. Wenn Sie das Programm neu kompilieren und erneut ausführen, erhalten Sie eine bessere Ausgabe wie folgt:

Offensichtlich ist das Ergebnis jetzt besser, was bedeutet, dass unser Struts-Konverter einwandfrei funktioniert.

Auf diese Weise können Sie mehrere Konverter erstellen und registrieren, um sie gemäß Ihren Anforderungen zu verwenden.