Учебники

Struts 2 — Преобразование типов

Все в HTTP-запросе рассматривается протоколом как строка . Это включает в себя числа, логические, целые числа, даты, десятичные дроби и все остальное. Однако в классе Struts вы можете иметь свойства любых типов данных.

Как Struts автоматически связывает свойства для вас?

Struts использует различные преобразователи типов под крышками для выполнения тяжелых работ.

Например, если у вас есть целочисленный атрибут в вашем классе Action, Struts автоматически преобразует параметр запроса в целочисленный атрибут, и вы ничего не делаете. По умолчанию Struts поставляется с несколькими конвертерами типов

Если вы используете какой-либо из перечисленных ниже преобразователей, вам не о чем беспокоиться —

  • Целое число, число с плавающей запятой, двойное число, десятичное число
  • Дата и дата и время
  • Массивы и Коллекции
  • Перечисления
  • логический
  • BigDecimal

Иногда, когда вы используете свой собственный тип данных, необходимо добавить свои собственные конвертеры, чтобы Struts знал, как конвертировать эти значения перед отображением. Рассмотрим следующий класс POJO Environment.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;
   }
}

Это очень простой класс с атрибутом name , поэтому в этом классе нет ничего особенного. Давайте создадим еще один класс, который содержит информацию о системе — SystemDetails.java .

Для целей этого упражнения я жестко закодировал среду «Разработка», а операционную систему — «Windows XP SP3».

В проекте реального времени вы получите эту информацию из конфигурации системы.

Давайте иметь следующий класс действий —

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

Далее, давайте создадим простой файл JSP System.jsp для отображения информации о среде и операционной системе.

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

Давайте свяжем вместе system.jsp и класс SystemDetails.java, используя struts.xml .

Класс SystemDetails имеет простой метод execute (), который возвращает строку « 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>
  • Щелкните правой кнопкой мыши имя проекта и выберите « Экспорт»> «Файл WAR», чтобы создать файл «War».

  • Затем разверните эту WAR в каталоге веб-приложений Tomcat.

  • Наконец, запустите сервер Tomcat и попробуйте получить доступ к URL-адресу http: // localhost: 8080 / HelloWorldStruts2 / system.action . Это создаст следующий экран —

Щелкните правой кнопкой мыши имя проекта и выберите « Экспорт»> «Файл WAR», чтобы создать файл «War».

Затем разверните эту WAR в каталоге веб-приложений Tomcat.

Наконец, запустите сервер Tomcat и попробуйте получить доступ к URL-адресу http: // localhost: 8080 / HelloWorldStruts2 / system.action . Это создаст следующий экран —

Системная информация

Что не так с приведенным выше выводом? Struts знает, как отобразить и преобразовать строку «Windows XP SP3» и другие встроенные типы данных, но он не знает, что делать со свойством типа Environment . Он просто вызывается методом toString () в классе

Чтобы решить эту проблему, давайте теперь создадим и зарегистрируем простой TypeConverter для класса Environment.

Создайте класс с именем EnvironmentConverter.java со следующим.

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

EnvironmentConverter расширяет класс StrutsTypeConverter и сообщает Struts, как преобразовать Environment в String, и наоборот, переопределив два метода convertFromString () и convertToString () .

Давайте теперь зарегистрируем этот конвертер, прежде чем использовать его в нашем приложении. Есть два способа зарегистрировать конвертер.

Если конвертер будет использоваться только в определенном действии, вам нужно будет создать файл свойств, который должен быть назван ‘[action-class]’ spoktion.properties .

В нашем случае мы создаем файл с именем SystemDetails-converstion.properties со следующей регистрационной записью —

environment = com.tutorialspoint.struts2.EnvironmentConverter

В приведенном выше примере «environment» — это имя свойства в классе SystemDetails.java, и мы говорим Struts использовать EnvironmentConverter для преобразования в это свойство и из него.

Однако мы не собираемся этого делать, вместо этого мы собираемся зарегистрировать этот конвертер глобально, чтобы его можно было использовать во всем приложении. Для этого создайте файл свойств с именем xwork-conversion.properties в папке WEBINF / classes со следующей строкой

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

Это просто регистрирует конвертер глобально, так что Struts может автоматически выполнять конвертацию каждый раз, когда сталкивается с объектом типа Environment. Теперь, если вы перекомпилируете и перезапустите программу, вы получите лучший результат следующим образом:

Системная информация

Очевидно, что теперь результат будет лучше, что означает, что наш конвертер Struts работает нормально.

Таким образом, вы можете создать несколько конвертеров и зарегистрировать их для использования в соответствии с вашими требованиями.