Struts 2 - Conversion de type

Tout sur une requête HTTP est traité comme un Stringpar le protocole. Cela inclut les nombres, les booléens, les entiers, les dates, les décimales et tout le reste. Cependant, dans la classe Struts, vous pouvez avoir des propriétés de n'importe quel type de données.

Comment Struts gère-t-il automatiquement les propriétés pour vous?

Struts utilise une variété de convertisseurs de type sous les couvercles pour faire le gros du travail.

Par exemple, si vous avez un attribut entier dans votre classe Action, Struts convertit automatiquement le paramètre de demande en attribut entier sans que vous ne fassiez quoi que ce soit. Par défaut, Struts est livré avec un certain nombre de convertisseurs de type

Si vous utilisez l'un des convertisseurs répertoriés ci-dessous, vous n'avez rien à craindre -

  • Entier, flottant, double, décimal
  • Date et Datetime
  • Tableaux et collections
  • Enumerations
  • Boolean
  • BigDecimal

Parfois, lorsque vous utilisez votre propre type de données, il est nécessaire d'ajouter vos propres convertisseurs pour que Struts sache comment convertir ces valeurs avant de les afficher. Considérez la classe POJO suivanteEnvironment.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;
   }
}

Il s'agit d'une classe très simple qui a un attribut appelé name, donc rien de spécial à propos de cette classe. Créons une autre classe qui contient des informations sur le système -SystemDetails.java.

Pour les besoins de cet exercice, j'ai codé en dur l'environnement sur «Développement» et le système d'exploitation sur «Windows XP SP3».

Dans un projet en temps réel, vous obtiendrez ces informations à partir de la configuration du système.

Laissez-nous avoir la classe d'action suivante -

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

Ensuite, créons un simple fichier JSP System.jsp pour afficher les informations sur l'environnement et le système d'exploitation.

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

Laissez-nous câbler le system.jsp et le SystemDetails.java classe ensemble en utilisant struts.xml.

La classe SystemDetails a une méthode execute () simple qui renvoie la chaîne "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>
  • Faites un clic droit sur le nom du projet et cliquez sur Export > WAR File pour créer un fichier War.

  • Déployez ensuite ce WAR dans le répertoire webapps de Tomcat.

  • Enfin, démarrez le serveur Tomcat et essayez d'accéder à l'URL http://localhost:8080/HelloWorldStruts2/system.action. Cela produira l'écran suivant -

Quel est le problème avec la sortie ci-dessus? Struts sait comment afficher et convertir la chaîne "Windows XP SP3" et d'autres types de données intégrés, mais il ne sait pas quoi faire avec la propriété deEnvironmenttype. Il est simplement appelétoString() méthode sur la classe

Pour résoudre ce problème, créons et enregistrons maintenant un simple TypeConverter pour la classe Environnement.

Créez une classe appelée EnvironmentConverter.java avec ce qui suit.

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

le EnvironmentConverter étend le StrutsTypeConverter classe et indique à Struts comment convertir l'environnement en chaîne et vice versa en remplaçant deux méthodes qui sont convertFromString() et convertToString().

Enregistrons maintenant ce convertisseur avant de l'utiliser dans notre application. Il existe deux façons d'enregistrer un convertisseur.

Si le convertisseur n'est utilisé que dans une action particulière, vous devrez créer un fichier de propriétés qui doit être nommé comme '[action-class]'converstion.properties.

Dans notre cas, nous créons un fichier appelé SystemDetails-converstion.properties avec l'inscription d'inscription suivante -

environment = com.tutorialspoint.struts2.EnvironmentConverter

Dans l'exemple ci-dessus, "environnement" est le nom de la propriété dans le SystemDetails.java classe et nous disons à Struts d'utiliser le EnvironmentConverter pour convertir vers et depuis cette propriété.

Cependant, nous n'allons pas faire cela, nous allons plutôt enregistrer ce convertisseur globalement, afin qu'il puisse être utilisé dans toute l'application. Pour ce faire, créez un fichier de propriétés appeléxwork-conversion.properties dans le WEBINF/classes dossier avec la ligne suivante

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

Cela enregistre simplement le convertisseur globalement, de sorte que Strutspeut effectuer automatiquement la conversion à chaque fois qu'il rencontre un objet de type Environnement. Maintenant, si vous recompilez et relancez le programme, vous obtiendrez une meilleure sortie comme suit -

De toute évidence, maintenant le résultat sera meilleur, ce qui signifie que notre convertisseur Struts fonctionne correctement.

C'est ainsi que vous pouvez créer plusieurs convertisseurs et les enregistrer pour les utiliser selon vos besoins.