Struts 2 - konwersja typu
Wszystko w żądaniu HTTP jest traktowane jako plik Stringprotokołem. Obejmuje to liczby, wartości logiczne, liczby całkowite, daty, ułamki dziesiętne i wszystko inne. Jednak w klasie Struts można mieć właściwości dowolnego typu danych.
W jaki sposób Struts automatycznie przewodzi nieruchomości?
Struts używa różnych typów konwerterów pod osłonami do wykonywania ciężkich prac.
Na przykład, jeśli w klasie Action masz atrybut liczby całkowitej, Struts automatycznie konwertuje parametr żądania na atrybut liczby całkowitej bez wykonywania jakichkolwiek czynności. Domyślnie Struts jest dostarczany z wieloma konwerterami typów
Jeśli korzystasz z któregokolwiek z wymienionych poniżej konwerterów, nie masz się czym martwić -
- Liczba całkowita, zmiennoprzecinkowa, podwójna, dziesiętna
- Data i data i godzina
- Tablice i kolekcje
- Enumerations
- Boolean
- BigDecimal
Czasami, gdy używasz własnego typu danych, konieczne jest dodanie własnych konwerterów, aby Struts wiedział, jak konwertować te wartości przed wyświetleniem. Rozważmy następującą klasę POJOEnvironment.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;
}
}
To jest bardzo prosta klasa, która ma atrybut o nazwie name, więc nic specjalnego w tej klasie. Stwórzmy kolejną klasę zawierającą informacje o systemie -SystemDetails.java.
Na potrzeby tego ćwiczenia na stałe zakodowałem środowisko na „Rozwój”, a system operacyjny na „Windows XP SP3”.
W projekcie czasu rzeczywistego można uzyskać te informacje z konfiguracji systemu.
Miejmy następującą klasę działań -
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;
}
}
Następnie stwórzmy prosty plik JSP System.jsp aby wyświetlić informacje o środowisku i systemie operacyjnym.
<%@ 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>
Połączmy system.jsp i SystemDetails.java klasa razem za pomocą struts.xml.
Klasa SystemDetails zawiera prostą metodę execute (), która zwraca ciąg znaków "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>
Kliknij prawym przyciskiem myszy nazwę projektu i kliknij Export > WAR File aby utworzyć plik wojny.
Następnie wdróż tę WAR w katalogu webapps serwera Tomcat.
Na koniec uruchom serwer Tomcat i spróbuj uzyskać dostęp do adresu URL http://localhost:8080/HelloWorldStruts2/system.action. Spowoduje to wyświetlenie następującego ekranu -
Co jest nie tak z powyższym wyjściem? Struts wie, jak wyświetlić i przekonwertować ciąg „Windows XP SP3” i inne wbudowane typy danych, ale nie wie, co zrobić z właściwościąEnvironmentrodzaj. To się po prostu nazywatoString() metoda na klasie
Aby rozwiązać ten problem, utwórzmy i zarejestrujmy plik simple TypeConverter dla klasy Environment.
Utwórz klasę o nazwie EnvironmentConverter.java z następującymi.
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();
}
}
Plik EnvironmentConverter rozszerza StrutsTypeConverter i informuje Struts, jak przekonwertować Environment na String i odwrotnie, zastępując dwie metody, które są convertFromString() i convertToString().
Zarejestrujmy teraz ten konwerter, zanim użyjemy go w naszej aplikacji. Istnieją dwa sposoby zarejestrowania konwertera.
Jeśli konwerter będzie używany tylko w określonej akcji, wówczas należałoby utworzyć plik właściwości, który należy nazwać jako '[action-class]'converstion.properties.
W naszym przypadku tworzymy plik o nazwie SystemDetails-converstion.properties z następującym wpisem rejestracyjnym -
environment = com.tutorialspoint.struts2.EnvironmentConverter
W powyższym przykładzie „środowisko” to nazwa właściwości w SystemDetails.java i mówimy Struts, aby używał rozszerzenia EnvironmentConverter do konwersji do iz tej właściwości.
Jednak tego nie zrobimy, zamiast tego zarejestrujemy ten konwerter globalnie, aby można go było używać w całej aplikacji. Aby to zrobić, utwórz plik właściwości o nazwiexwork-conversion.properties w WEBINF/classes folder z następującym wierszem
com.tutorialspoint.struts2.Environment = \
com.tutorialspoint.struts2.EnvironmentConverter
To po prostu rejestruje konwerter globalnie, więc Strutsmoże automatycznie wykonać konwersję za każdym razem, gdy napotka obiekt typu Environment. Teraz, jeśli ponownie skompilujesz i ponownie uruchomisz program, uzyskasz lepszy wynik w następujący sposób -
Oczywiście teraz wynik będzie lepszy, co oznacza, że nasz konwerter Struts działa dobrze.
W ten sposób możesz utworzyć wiele konwerterów i zarejestrować je do użytku zgodnie z własnymi wymaganiami.