最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章搞定Struts2的類型轉(zhuǎn)換

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

前言

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

一、類型轉(zhuǎn)換的意義

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

二、Struts2的類型轉(zhuǎn)換器

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

內(nèi)置類型轉(zhuǎn)換器有:

     1.boolean和Boolean

     2.char和Character

     3.int和Integer

     4.long和Long

     5.float和Float

     6.double和Double

     7.date

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

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

1、需求分析

比如我們需要在頁面上輸入(2,3)這樣一個(gè)坐標(biāo)點(diǎn),將該點(diǎn)轉(zhuǎn)換為一個(gè)點(diǎn)對象類型。

2、實(shí)現(xiàn)

當(dāng)內(nèi)置類型轉(zhuǎn)換無法滿足我們的需求的時(shí)候,需要用到自定義類型轉(zhuǎn)換。Struts2的類型轉(zhuǎn)換時(shí)基于ONGL的,在ONGL中有一個(gè)接口TypeConverter,該接口中有一個(gè)方法converterValue,該方法很復(fù)雜。其中還有一個(gè)默認(rèn)的實(shí)現(xiàn)類DefaultTypeConverter,通過該類來實(shí)現(xiàn)類型轉(zhuǎ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;
  }
 }
}

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

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

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

3、Struts的實(shí)現(xiàn)

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

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、類型轉(zhuǎn)換器的錯(cuò)誤處理

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

如何那么改變默認(rèn)類型轉(zhuǎn)換錯(cuò)誤的錯(cuò)誤提示信息?

方法一:

首先創(chuàng)建一個(gè)資源文件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ù)轉(zhuǎn)換失敗.

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

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

方法二:

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

總計(jì)

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

相關(guān)文章

  • java wait()/notify() 實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模式詳解

    java wait()/notify() 實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模式詳解

    這篇文章主要介紹了java wait()/notify() 實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模式詳解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 如何使用IDEA完成登錄與注冊功能

    如何使用IDEA完成登錄與注冊功能

    這篇文章主要介紹了如何使用IDEA完成登錄與注冊功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • mybatis整合springboot報(bào)BindingException:Invalid?bound?statement?(not?found)異常解決

    mybatis整合springboot報(bào)BindingException:Invalid?bound?stateme

    這篇文章主要給大家介紹了關(guān)于mybatis整合springboot報(bào)BindingException:Invalid?bound?statement?(not?found)異常的解決辦法,這個(gè)錯(cuò)誤通常是由于Mapper文件中的statement?id與Java代碼中的方法名不一致導(dǎo)致的,需要的朋友可以參考下
    2024-01-01
  • Java實(shí)現(xiàn)FTP文件與文件夾的上傳和下載

    Java實(shí)現(xiàn)FTP文件與文件夾的上傳和下載

    本文主要分享了Java實(shí)現(xiàn)文件上傳和下載的具體實(shí)例,分為單個(gè)文件的上傳與下載和整個(gè)文件夾的上傳與下載。具有很好的參考價(jià)值,需要的朋友一起來看下吧
    2016-12-12
  • spring多數(shù)據(jù)源配置實(shí)現(xiàn)方法實(shí)例分析

    spring多數(shù)據(jù)源配置實(shí)現(xiàn)方法實(shí)例分析

    這篇文章主要介紹了spring多數(shù)據(jù)源配置實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了spring多數(shù)據(jù)源配置相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • Spring?Boot實(shí)現(xiàn)多數(shù)據(jù)源連接和切換的解決方案

    Spring?Boot實(shí)現(xiàn)多數(shù)據(jù)源連接和切換的解決方案

    文章介紹了在SpringBoot中實(shí)現(xiàn)多數(shù)據(jù)源連接和切換的幾種方案,并詳細(xì)描述了一個(gè)使用AbstractRoutingDataSource的實(shí)現(xiàn)步驟,感興趣的朋友一起看看吧
    2025-01-01
  • 幾種常見mybatis分頁實(shí)現(xiàn)方式

    幾種常見mybatis分頁實(shí)現(xiàn)方式

    這篇文章主要介紹了幾種常見mybatis分頁實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java注解的全面分析

    java注解的全面分析

    這篇文章主要介紹了java注解的全面分析的相關(guān)資料,Java提供的一種原程序中的元素關(guān)聯(lián)任何信息和任何元數(shù)據(jù)的途徑和方法,需要的朋友可以參考下
    2017-08-08
  • SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)

    SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)

    這篇文章主要介紹了SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • JAVA十大排序算法之希爾排序詳解

    JAVA十大排序算法之希爾排序詳解

    這篇文章主要介紹了java中的希爾排序,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08

最新評論

宣恩县| 弥渡县| 临猗县| 荔波县| 南汇区| 隆林| 射阳县| 鄂伦春自治旗| 墨江| 昔阳县| 罗田县| 乌拉特前旗| 水富县| 鹤壁市| 城市| 大化| 大关县| 射阳县| 武汉市| 高邑县| 彭山县| 徐水县| 齐齐哈尔市| 澎湖县| 舟山市| 清远市| 博客| 临安市| 吴旗县| 阿鲁科尔沁旗| 赤水市| 文登市| 宾川县| 申扎县| 会东县| 潼关县| 安西县| 禄劝| 察雅县| 潢川县| 从江县|