當前位置:首頁 » struts2教學 » Struts2類型轉換

Struts2類型轉換

Struts2類型轉換實例代碼和教學-在HTTP請求中的一切都將被視為一個String的協議。這包括數字,布爾值,整數,日期,小數和其他一切。

在HTTP請求中的一切都將被視為一個String的協議。這包括數字,布爾值,整數,日期,小數和其他一切。每一件事情是一個字符串,根據HTTP。然而在Struts類可以有任何數據類型的屬性。我們如何讓Struts自動裝配屬性呢?

Struts使用了多種類型的轉換器在幕後做了許多繁重的工作。例如,如果您有一個整數屬性在Action類,Struts自動將請求參數的整數屬性,冇有做任何事情。默認情況下,Struts一些類型轉換器。下麵列出了其中的一些,如果使用的是他們,那麼冇有什麼可擔心的:

  • Integer, Float, Double, Decimal

  • Date and Datetime

  • Arrays and Collections

  • Enumerations

  • Boolean

  • 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 類及 usingstruts.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的webapps目錄下。最後,啟動Tomcat服務器,並嘗試訪問URL http://localhost:8080/HelloWorldStruts2/system.action。這會給你以下畫麵:

用上麵的輸出,什麼是錯呢? Struts的知道如何顯示和轉換字符串的“Windows XP SP3”等內置數據類型,但不知道做什麼用的環境類型的屬性。因此,它簡單地稱為toString()方法的類。

要解決這個問題,現在讓我們創建並注冊一個簡單的TypeConverter環境類。創建一個類叫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環境如何轉換到通過重寫兩個的方法convertFromString()和convertToString(),一個字符串,反之亦然。現在讓我們來注冊該轉換器之前,我們我們在我們的應用程序。有兩種方式來注冊一個轉換器。如果轉換器將隻被用於在一個特定的動作,那麼將創建一個屬性文件需要被命名為“[action-class]' - converstion.properties,因此,在我們的例子中,我們創建一個名為SystemDetails converstion.properties:

environment=com.tutorialspoint.struts2.EnvironmentConverter

在上麵的例子中,“環境”這個名字的財產在SystemDetails.java類,我們告訴Struts的轉換和從該屬性的使用EnvironmentConverterfor。但是,我們不打算這樣做,相反,我們要在全球範圍內注冊該轉換器,因此,它可以在整個應用程序。要做到這一點,創建一個屬性文件稱為XWork的conversion.properties在WEB-INF/classes文件夾下麵的行:

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

這隻是全局注冊的轉換器,使的Struts可以自動轉換每次遇到的對象類型的環境。現在,如果重新編譯並重新運行該程序會得到更好的輸出如下:

顯然,現在的結果是更好的,這意味著我們的Struts轉換器工作正常。這是你如何可以創建多個轉換器和注冊後才能使用按您的要求。