Struts2教學
Struts2快速入門
Struts2 MVC架構
Struts2 是什麼?
Struts2 環境配置
Struts2 體系結構
Struts2 Hello World 實例
Struts2 配置文件
Struts2 Action/動作
Struts2 攔截器
Struts2 結果和結果類型
Struts2 值棧/OGNL
Struts2 文件上傳
Struts2 MySQL數據庫訪問
Struts2 發送郵件Email
Struts2 驗證框架
Struts2 基於XML校驗
Struts2 本地化/國際化(i18n)
Struts2 類型轉換
Struts2 主題和模板
Struts2 異常處理
Struts2 註釋
Struts2 註釋類型
Struts2 控件標籤
Struts2 iterator標籤
Struts2 if/else標籤
Struts2 merge標籤
Struts2 append標籤
Struts2 generator標籤
Struts2 數據標籤
Struts2 action標籤
Struts2 include標籤
Struts2 bean 標籤
Struts2 date 標籤
Struts2 param 標籤
Struts2 property 標籤
Struts2 set 標籤
Struts2 text 標籤
Struts2 url標籤
Struts2 表單標籤
Struts2 Ajax 標籤
Struts2和Spring集成
Struts2和Tiles集成
Struts2和Hibernate集成
Struts 2 hello world (XML版本)
Struts2註解示例
Struts2 @ResultPath註釋示例
Struts2 include(包含)多個配置文件
Struts2命名空間配置和解釋
Struts2開發者模式
如何刪除Struts2動作的後綴擴展名
使用Struts2動作
Struts2的ActionError&ActionMessage示例
Struts2模型驅動實例
Struts2映射攔截動作
Struts2重寫攔截器參數
Struts2攔截器棧的例子
Struts2 execAndWait攔截器例子
Struts2 <s:textfield>文本示例
Struts2 <s:password>密碼示例
Struts2 <s:hidden>隱藏值例子
Struts2 <s:textarea>文本域實例
Struts2 <s:radio>單選按鈕例子
Struts2單選預選按鈕值
Struts2 <s:checkbox>複選框例子
Struts2設置多個複選框缺省值
Struts2 <s:checkboxlist>多個複選框例子
Struts2 <s:select>下拉框例子
Struts2自動選擇下拉框的值
Struts2 <s:combobox>組合框的例子
Struts2 <s:head>示例
Struts2文件上傳例子
Struts2上傳多個文件例子
Struts2 <s:doubleselect>示例
Struts2 <s:updownselect>示例
Struts2 <s:optiontransferselect>示例
Struts2 <sx:datetimepicker>示例
Struts2 <sx:autocompleter>自動提示例子
Struts2 autocompleter+JSON例子
Struts2 <s:iterator>迭代器標籤示例
Struts2 if,elseif,else標籤示例
struts2 <s:append>標籤示例
Struts2 <s:generator>標籤示例
Struts2 <s:merge>標籤示例
Struts2 <s:sort>標籤示例
Struts2 <s:subset>標籤示例
Struts2 <s:a>標籤示例
Struts2 <s:action>標籤示例
Struts2 <s:bean>標籤示例
Struts2 <s:date>標籤示例
Struts2 <s:debug>標籤示例
Struts2 <s:include>標籤示例
Struts2 <s:i18n>標籤示例
Struts2 <s:param>標籤示例
Struts2 <s:property>標籤實例
Struts2 <s:push>標籤示例
Struts2 <s:set>標籤示例
Struts2 <s:texttag>標籤示例
Struts2 <s:url>標籤示例
Struts2資源包使用示例
Struts2本地化和國際化
Struts2 key鍵屬性示例
Struts2中文本地化問題
如何配置Struts2全局資源包
Struts2+Spring集成實例
Struts2+Quartz2調度集成實例
Struts2+Hibernate使用Full Hibernate Plugin集成
Struts2+Hibernate集成實例
Struts2+Spring+Hibernate集成實例
Struts2+Log4j集成
Struts2的FilterDispatcher和StrutsPrepareAndExecuteFilter有什麼不同?
Struts2獲取HttpServletRequest實例
Struts2獲取HttpServletResponse實例
如何獲取ServletContext對象
Struts2配置Action類的靜態參數
Struts2下載文件實例
Struts2和JSON實例

Struts2 類型轉換

在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.yiibai.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.yiibai.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"%> System Details Environment: <s:property value="environment"/>
Operating System:<s:property value="operatingSystem"/>

讓我們編寫 system.jsp,SystemDetails.java類在struts.xml一起使用。 SystemDetails類有一個簡單的execute()方法返回字符串「SUCCESS」。

<constant name="struts.devMode" value="true" /> <package name="helloworld" extends="struts-default"> <action name="system" class="com.yiibai.struts2.SystemDetails" method="execute"> <result name="success">/System.jsp

右鍵點擊項目名稱,並單擊 Export > WAR File 創建一個WAR文件。然後部署此WAR在Tomcat的webapps目錄下。最後,啓動Tomcat服務器和嘗試訪問URL http://localhost:8080/HelloWorldStruts2/system.action。這會給出以下畫面:

System

上面的輸出有什麼錯? Struts 知道如何顯示字符串「Windows XP SP3」等內置數據類型轉換,但它不知道用Environmenttype屬性做什麼。所以,它只是被稱爲類的toString()方法。爲了解決這個問題,現在讓我們創建並註冊一個簡單的TypeConverter環境類。創建一個類名爲EnvironmentConverter.java以下。

package com.yiibai.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 類,如何將環境爲一個 String,反之亦然通過重寫兩個的方法 convertFromString()和 convertToString()並通知了Struts。現在,讓我們註冊這個轉換器之前,我們我們在我們的應用程序。有兩種方法來註冊一個轉換器。如果轉換器將只用於在一個特定的動作,那麼將需要創建一個屬性文件需要被命名爲 '[action-class]'-converstion.properties,所以,在我們的例子中,我們創建一個名爲SystemDetails下面的註冊 converstion.properties 輸入: 

environment=com.yiibai.struts2.EnvironmentConverter

在上面的例子中,「environment」的名字是在SystemDetails.java 類的一個屬性,告訴要使用Struts EnvironmentConverter從這個屬性的轉換。但是,我們不打算這樣做,相反,我們要在全局範圍內註冊這個轉換器,因此,它可以在整個應用程序。要做到這一點,創建一個屬性文件名爲 xwork-conversion.properties 在 WEB-INF/classes文件夾下面一行:

com.yiibai.struts2.Environment = com.yiibai.struts2.EnvironmentConverter

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

System

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