亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一篇文章搞定Struts2的類型轉換

 更新時間:2017年02月07日 09:18:15   投稿:daisy  
這篇文章主要介紹了關于Struts2類型轉換的相關資料,文中主要介紹了Struts2的類型轉換器和自定義類型轉換器的實現(xiàn),有需要的朋友可以參考借鑒,下面來一起看看吧。

前言

我們知道通過HTTP提交到后臺的數(shù)據(jù),都是字符串的形式,而我們需要的數(shù)據(jù)類型當然不只字符串類型一種。所以,我們需要類型轉換!下面來看看詳細的介紹吧。

一、類型轉換的意義

所有的MVC框架,解決的都是表現(xiàn)層的解決方案,都需要收集用戶請求參數(shù),并把參數(shù)提供給控制器。但是,在Web應用中所有的請求參數(shù)都是字符串類型的,Java是強類型的語言,如何將字符串轉換為Java類型,這是框架要解決的一個問題。
例如,一個注冊頁需要輸入年齡、日期等。這時候就需要將日期、年齡字符串轉換為相應類型。

二、Struts2的類型轉換器

Struts2提供了內置的類型轉換器,對于大部分類型,開發(fā)者無需自定義類型轉換器,使用內置的類型轉換器就可以完成我們需要的類型轉換。

內置類型轉換器有:

     1.boolean和Boolean

     2.char和Character

     3.int和Integer

     4.long和Long

     5.float和Float

     6.double和Double

     7.date

比如我們在頁面輸入20,傳輸?shù)胶笈_肯定是字符串類型。但是Struts框架的內置類型轉換可以把20轉換為int型。但是如果我們轉換abc這樣的為int是行不通的。

三、自定義類型轉換器的實現(xiàn)

1、需求分析

比如我們需要在頁面上輸入(2,3)這樣一個坐標點,將該點轉換為一個點對象類型。

2、實現(xiàn)

當內置類型轉換無法滿足我們的需求的時候,需要用到自定義類型轉換。Struts2的類型轉換時基于ONGL的,在ONGL中有一個接口TypeConverter,該接口中有一個方法converterValue,該方法很復雜。其中還有一個默認的實現(xiàn)類DefaultTypeConverter,通過該類來實現(xiàn)類型轉換。

package com.study.converter;
import java.util.Map;
import com.study.bean.Point;
import ognl.DefaultTypeConverter;
 
public class PointConverter extends DefaultTypeConverter{
 public Object convertValue(Map context, Object value, Class toType) {
  if(toType==Point.class){
   String []strs = (String[])value;
   String []xy = strs[0].split(",");
    
   int x = Integer.valueOf(xy[0]);
   int y = Integer.valueOf(xy[1]);
    
   Point p = new Point();
   p.setX(x);
   p.setY(y);
    
   return p;
    
  }else if(toType==String.class){
   Point p = (Point) value;
   return "["+p.getX()+","+p.getY()+"]";
  }else{
   return null;
  }
 }
}

這就是轉換器的一個簡單實現(xiàn),把頁面?zhèn)鬏數(shù)闹颠M行解析,最后轉換為Point類型。然后要讓類型轉換器起作用,需要進行配置
struts2提供了兩種配置方法:

a.局部:首先創(chuàng)建文件命名如Actionname-conversion.properties,里面的內容為 屬性=類型轉換器(ponit=com.study.converter)需要寫在包下面

b.全局:首先創(chuàng)建文件命名如xwork-conversion.properties,內容為com.study.bean.Ponit=com.study.converter。文件需要寫在src下面

3、Struts的實現(xiàn)

struts2中有一個StrutsTypeConverter類,它是繼承DefaultTypeConverter。使用它來自定義轉換器更加方便,示例代碼如下:

package com.study.converter;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.study.bean.Point;
 
public class PointConverter extends StrutsTypeConverter{
 public Object convertFromString(Map map, String[] obj, Class toType) {
  String []strs = obj;
  String []xy = strs[0].split(",");
 
  int x = Integer.valueOf(xy[0]);
  int y = Integer.valueOf(xy[1]);
 
  Point p = new Point();
  p.setX(x);
  p.setY(y);
 
  return p;
 }
 
 public String convertToString(Map map, Object obj) {
  Point p = (Point) obj;
  return "["+p.getX()+","+p.getY()+"]";
 }
}

4、類型轉換器的錯誤處理

Struts2提供了一個名為conversionError的攔截器,如果類型轉換出現(xiàn)錯誤,攔截器負責將錯誤封裝成表單錯誤(filederror),并將錯誤信息放入ActionContext中。

如何那么改變默認類型轉換錯誤的錯誤提示信息?

方法一:

首先創(chuàng)建一個資源文件Mess.properties,放在src下面
然后覆蓋xwork-core-2.3.31\com\opensymphony\xwork2\xwork-messages.properties里面的屬性xwork.default.invalid.fieldvalue。即在Mess.properties中寫入如下參數(shù)

xwork.default.invalid.fieldvalue="{0}"參數(shù)轉換失敗.

然后指定我們的資源文件,在struts.xml中(不需要加文件后綴)

<constant name="struts.custom.i18n.resources" value="Mess"></constant>

方法二:

為某個action的字段提供錯誤信息提示
定義Actionname.properties文件,添加配置——Invalid.fieldvalue.屬性名=提示信息

總計

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關文章

  • 詳解WebSocket+spring示例demo(已使用sockJs庫)

    詳解WebSocket+spring示例demo(已使用sockJs庫)

    本篇文章主要介紹了WebSocket spring示例demo(已使用sockJs庫),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • JavaWeb使用Session和Cookie實現(xiàn)登錄認證

    JavaWeb使用Session和Cookie實現(xiàn)登錄認證

    本篇文章主要介紹了JavaWeb使用Session和Cookie實現(xiàn)登錄認證,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • java中幾種常見的排序算法總結

    java中幾種常見的排序算法總結

    大家好,本篇文章主要講的是java中幾種常見的排序算法總結,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Java 判斷線程池所有任務是否執(zhí)行完畢的操作

    Java 判斷線程池所有任務是否執(zhí)行完畢的操作

    這篇文章主要介紹了Java 判斷線程池所有任務是否執(zhí)行完畢的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • java判斷某個點是否在所畫多邊形/圓形內

    java判斷某個點是否在所畫多邊形/圓形內

    這篇文章主要為大家詳細介紹了java判斷某個點是否在所畫多邊形或圓形內的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Java多線程同步工具類CyclicBarrier的使用

    Java多線程同步工具類CyclicBarrier的使用

    本文主要介紹了Java多線程同步工具類CyclicBarrier的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Spring Boot基于數(shù)據(jù)庫如何實現(xiàn)簡單的分布式鎖

    Spring Boot基于數(shù)據(jù)庫如何實現(xiàn)簡單的分布式鎖

    這篇文章主要給大家介紹了關于Spring Boot基于數(shù)據(jù)庫如何實現(xiàn)簡單的分布式鎖的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring Boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07
  • Java二維數(shù)組實戰(zhàn)案例

    Java二維數(shù)組實戰(zhàn)案例

    這篇文章主要介紹了Java二維數(shù)組,結合具體案例形式分析了java二維數(shù)組定義、遍歷、計算等相關操作技巧,需要的朋友可以參考下
    2019-08-08
  • 通過實例學習Java集合框架HashSet

    通過實例學習Java集合框架HashSet

    這篇文章主要介紹了通過實例學習Java集合框架HashSet,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 很多人竟然不知道Java線程池的創(chuàng)建方式有7種

    很多人竟然不知道Java線程池的創(chuàng)建方式有7種

    本文主要介紹了很多人竟然不知道Java線程池的創(chuàng)建方式有7種,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論