Struts2系列筆記(7)---Struts2類型轉換

来源:http://www.cnblogs.com/qdhxhz/archive/2017/02/21/6407512.html
-Advertisement-
Play Games

Struts2類型轉換 struts2中內置了大量的類型轉換器用來完成數據類型轉換的問題,這篇隨筆主要通過兩個方面來寫Struts類型轉換 1:Struts2內置的類型轉換器 2:如何自定義類型轉換器 那麼首先我們來學習有關Struts2內置的類型 1:Struts2內置的類型轉換器 Struts2 ...


Struts2類型轉換     

       struts2中內置了大量的類型轉換器用來完成數據類型轉換的問題,這篇隨筆主要通過兩個方面來寫Struts類型轉換

       1:Struts2內置的類型轉換器

       2:如何自定義類型轉換器

      那麼首先我們來學習有關Struts2內置的類型

         1:Struts2內置的類型轉換器

Struts2的內置類型轉換器,可以為你處理大多數的類型轉換,這包括了以下類型和String類型之間的轉換!

1.String

將int,double,boolean,String類型的數組或java.util.Date類型轉換成字元串。

2:boolean和Boolean

在字元串與boolean之間轉換

3:char/Character

在字元串和字元之間轉換

4:int/Integer,float/Float,long/Long,double/Double 

在字元串與數值類型之間進行轉換 

5:date

在字元串和日期類型之間進行轉換,預設格式是:YYYY-MM-DD

6:數組

由於數組本身就有類型,可以將多個同名參數,轉換到數組中(在之前總結的興趣愛好多選擇,如果你選擇多個,同時他們name屬性相同就自動變為數組)

7:集合

支持將數據保存到 List 或者 Map 集合

關於內置類型轉換器舉例:

 Action類

 1 import java.util.Date;
 2 import com.opensymphony.xwork2.ActionSupport;
 3 
 4 public class CustomerAction extends ActionSupport {
 5 
 6     private String username;
 7 
 8     private int age;
 9 
10     private Date birthday;
11 
12     @Override
13     public String execute() throws Exception {
14         System.out.println("客戶姓名是:" + username + ",年齡是:" + age + ",生日:" + birthday);
15 
16         return NONE;
17     }
18     public void setUsername(String username) {
19         this.username = username;
20     }
21     public void setAge(int age) {
22         this.age = age;
23     }
24     public void setBirthday(Date birthday) {
25         this.birthday = birthday;
26     }
27 }
28 /*控制台輸出結果:客戶姓名是:zhangsan,年齡是:12,生日:Tue Jul 09 00:00:00 CST 1996
29 */

 jsp界面

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <html>
 3   <head>
 4   </head>
 5   <body>
 6     <form action="${pageContext.request.contextPath }/customer.action">
 7      客戶姓名:<input type="text" name="username"><br/>
 8      年齡:<input type="text" name="age"><br/>
 9      生日:<input type="text" name="birthday"><br/>
10      <input type="submit" value="提交">     
11     </form>    
12   </body>
13 </html>

 界面輸入:這裡年齡只能輸入合法年齡,日期的預設格式:yyyy-MM-dd,如果你輸入不合規則網頁會報錯,比如你輸入1996/7/9頁面就會報錯

     2:如何自定義類型轉換器

       為什麼需要自定義類型轉換器,這個問題相信大家都知道,就像我上面所說的,日期的預設格式是yyyy-MM-dd,那如果你想輸入yyyy/mm/dd或者其它的

這個時候就需要你修改你自己的類型轉換器,否則會報錯。下麵我寫一個有關自定義類型轉換器的方法: 繼承StrutsTypeConverter

DateConverter 
 1 import java.text.DateFormat;
 2 import java.text.ParseException;
 3 import java.text.SimpleDateFormat;
 4 import java.util.Date;
 5 import java.util.Map;
 6 
 7 import javax.xml.bind.TypeConstraintException;
 8 import org.apache.struts2.util.StrutsTypeConverter;
 9 
10 public class DateConverter extends StrutsTypeConverter {
11     //為方便支持多種日期格式的轉換,可增加時間格式
12     private final DateFormat [] dateformats={
13             new SimpleDateFormat("yyyy-MM-dd"),
14             new SimpleDateFormat("yyyy年MM月dd日"),
15             new SimpleDateFormat("yyyy.MM.dd"),
16             new SimpleDateFormat("yyyy/MM/dd")
17     };
18     /* 將一個或多個字元串值轉換為指定的類型
19      * 
20      */
21     @Override
22     public Object convertFromString(Map arg0, String[] values, Class toType) {
23         //從表單獲取的日期字元串
24         String dateStr = values[0];//思考:這裡為什麼是數組而不是字元串?我自己也沒有搞明白,希望大神看到後宰評論區給予解答,謝謝
25         for(int i = 0;i<dateformats.length;i++){//遍歷日期類型進行轉換
26             
27             try { //SimpleDateFormat類中parse()方法用於將輸入的特定字元串轉換成Date類的對象
28                 return dateformats[i].parse(dateStr);
29             } catch (Exception e) {
30                 continue; //很關鍵
31             }
32         }
33         throw new TypeConstraintException("遍歷結束仍沒有指定的類型轉換");
34     }
35 
36     /* 將指定對象轉化為字元串
37      * method:這個方法是用來回顯用的,就是你需要回顯成什麼樣的格式就可以設置什麼樣的格式
38      */
39     @Override
40     public String convertToString(Map context, Object object) {
41         Date date = (Date) object;
42         //指定輸出的格式
43         return new SimpleDateFormat("yyyy年MM月dd日").format(date);
44     }
45 }
46 /*主要講這裡的continue,就是如果你是輸入的是1992-2-2,那麼dateformats[0]和你直接匹配
47  * 那麼直接返回,當如果你開始輸入的是1992/2/2那麼就和dateformats[0]不匹配,那麼出現異常執行
48  * catch中的內容,而catch中是continue代表終止本次迴圈進入下一次迴圈,那麼有和dateformats[1]
49  * 進行匹配,如果都不匹配才會異常,所以這裡用的太關鍵了
50  *

 Aation(類)

 1 import java.util.Date;
 2 import com.opensymphony.xwork2.ActionSupport;
 3 
 4 public class RegisterAction1 extends ActionSupport {  
 5     private Date brithday1;
 6     private Date brithday2;
 7     private Date brithday3;
 8     private Date brithday4;
 9     /*
10      * 為上面四個提供set和get方法
11      */
12 
13     @Override
14     public String execute() throws Exception {
15         //獲取表單的數據
16        System.out.println("生日1"+brithday1);
17        System.out.println("生日2"+brithday2);
18        System.out.println("生日3"+brithday3);
19        System.out.println("生日4"+brithday4);     
20         return SUCCESS;
21     }
22 } 
23 /*後臺輸出結果:
24  * 生日1Sun Feb 02 00:00:00 CST 1992
25  * 生日2Sun Feb 02 00:00:00 CST 1992
26  * 生日3Sun Feb 02 00:00:00 CST 1992
27  * 生日4Sun Feb 02 00:00:00 CST 1992 
28  */

register.jsp(登錄界面)

 1 <html>
 2   <head>
 3     <title>註冊</title>
 4   </head> 
 5   <body>
 6      <!-- 這裡有四個生日 -->
 7      <form action="${pageContext.request.contextPath }/register1.action" method="post">
 8             生日1:<input type="text" name="brithday1"><br/><br/>
 9             生日2:<input type="text" name="brithday2"><br/><br/>
10             生日3:<input type="text" name="brithday3"><br/><br/>
11             生日4:<input type="text" name="brithday4"><br/><br/>
12           <input type="submit" value="註冊">
13      </form>
14   </body>
15 </html>

struts.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <!-- 開發者模式 -->
 7     <constant name="struts.devMode" value="true"></constant>
 8     
 9     <package name="default"  extends="struts-default">    
10         <action name="register1" class="com.guigu.struts2.action.RegisterAction1">
11            <result>/result.jsp</result>
12         </action>
13     </package>
14 </struts>
result.jsp
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%@ taglib uri="/struts-tags"  prefix="s"%>
 3 <html>
 4   <head>
 5   </head>
 6   <body>
 7   <!-- 回顯的時候發現儘管前面輸入格式不一樣,但輸出格式是一樣的 -->
 8   生日1:<s:property value="brithday1"/><br/>
 9   生日2:<s:property value="brithday2"/><br/>
10   生日3:<s:property value="brithday3"/><br/>
11   生日4:<s:property value="brithday4"/><br/> 
12   </body>
13 </html>
界面:

最終返回界面

註意:這中間還有很重要的東西需要配置配置轉換器

4、配置轉換器      Struts2提供了兩種方式配置轉換器 方式一:應用於全局範圍的類型轉換器,在src目錄下創建xwork-conversion.properties      轉換類全名=類型轉換器類全名     java.util.Date=com.sytudy.struts2.action.DateConverter  (前面是你需要轉換的類型,後面是類型轉換器類 方式二:應用於特定類的類型轉換器,在特定類的相同目錄下創建一個名為ClassName-conversion.properties的屬性文件      特定Action類的屬性名=類型轉換器類全名  

  這篇文字就講到這裡,如果哪裡有不足,歡迎大家指點,謝謝


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、場景:有一個氣象站,檢測氣象後發佈氣象信息,有3個觀察者會接受氣象的發佈信息。 二、普通的處理方式: 三、觀察者模式處理方式: OO原則:為交互對象之間的松耦合設計而努力。(這個是第四條,後續還有幾條) 松耦合的設計之所以能讓我們建立有彈性的OO系統,能夠應對變化,是因為對象之間的互相依賴降到了 ...
  • 一、概述 建造者模式很容易讓人想到建房子,不管建剛需房、改善房還是別墅,它們都離不開地基、柱子、層面和牆體這些組成部分,建築工人就是把這些組成部分一個個建起來,最後連成一體建出一棟棟樓房。 來看看建造者模式的定義,將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。建房子的過程 ...
  • 一:現實場景 有時候在開發的過程中,我們經常會根據某個狀態的值,寫出很多的ifelse邏輯,比如拿項目裡面的案例來說,如果當前發送的是彩信,此種狀態需要如何給 實體賦值,如果是簡訊,郵件又是其他方式的賦值,等等此類,這種情況下一般會寫出如下if判斷,對吧,真實代碼如下: 上面的代碼還是非常簡單明瞭的 ...
  • 在面向對象軟體開發過程中,一些有經驗的軟體開發人員通常會採用設計模式來解決一些日常工作中的一些問題。設計模式是前人在軟體開發的過程中總結出來的一些解決問題的方案,並且經受住了時間的考驗和廣大軟體開發人員的不斷驗證。在軟體開發過程中,如果我們合理的使用設計模式可以提高代碼的復用性和可維護性。為了保證引 ...
  • 封裝矩形構造函數,扇形構造函數 ...
  • 前言 筆者最近在負責某集團網站時,同時用到了Nginx與F5,如圖所示,負載均衡器F5作為處理外界請求的第一道“牆”,將請求分發到web伺服器後,web伺服器上的Nginx再進行處理,靜態內容直接訪問本地門戶,動態數據則通過反向代理指向內網服務。 其實Nginx和F5這兩者均可用作網站負載均衡,那二 ...
  • ...
  • 1. 許可權管理:點開二級菜單進入三級菜單顯示 角色(基礎許可權)和按鈕許可權 角色(基礎許可權): 分角色組和角色,獨立分配菜單許可權和增刪改查許可權。 按鈕許可權: 給角色分配按鈕許可權。2. 按鈕管理:自定義按鈕管理,維護按鈕許可權標識等3. 菜單管理:無限級別自定義菜單,自定義菜單圖標,業務菜單和系統菜單分離 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...