程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 一篇文章搞定Struts2的類型轉換

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

編輯:關於JAVA

一篇文章搞定Struts2的類型轉換。本站提示廣大學習愛好者:(一篇文章搞定Struts2的類型轉換)文章只能為提供參考,不一定能成為您想要的結果。以下是一篇文章搞定Struts2的類型轉換正文


前言

我們知道經過HTTP提交到後台的數據,都是字符串的方式,而我們需求的數據類型當然不只字符串類型一種。所以,我們需求類型轉換!上面來看看詳細的引見吧。

一、類型轉換的意義

一切的MVC框架,處理的都是表現層的處理方案,都需求搜集用戶懇求參數,並把參數提供應控制器。但是,在Web使用中一切的懇求參數都是字符串類型的,Java是強類型的言語,如何將字符串轉換為Java類型,這是框架要處理的一個問題。
例如,一個注冊頁需求輸出年齡、日期等。這時分就需求將日期、年齡字符串轉換為相應類型。

二、Struts2的類型轉換器

Struts2提供了內置的類型轉換器,關於大局部類型,開發者無需自定義類型轉換器,運用內置的類型轉換器就可以完成我們需求的類型轉換。

內置類型轉換器有:

     1.boolean和Boolean

     2.char和Character

     3.int和Integer

     4.long和Long

     5.float和Float

     6.double和Double

     7.date

比方我們在頁面輸出20,傳輸到後台一定是字符串類型。但是Struts框架的內置類型轉換可以把20轉換為int型。但是假如我們轉換abc這樣的為int是行不通的。

三、自定義類型轉換器的完成

1、需求剖析

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

2、完成

當內置類型轉換無法滿足我們的需求的時分,需求用到自定義類型轉換。Struts2的類型轉換時基於ONGL的,在ONGL中有一個接口TypeConverter,該接口中有一個辦法converterValue,該辦法很復雜。其中還有一個默許的完成類DefaultTypeConverter,經過該類來完成類型轉換。

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;
  }
 }
}

這就是轉換器的一個復雜完成,把頁面傳輸的值停止解析,最後轉換為Point類型。然後要讓類型轉換器起作用,需求停止配置
struts2提供了兩種配置辦法:

a.部分:首先創立文件命名如Actionname-conversion.properties,外面的內容為 屬性=類型轉換器(ponit=com.study.converter)需求寫在包上面

b.全局:首先創立文件命名如xwork-conversion.properties,內容為com.study.bean.Ponit=com.study.converter。文件需求寫在src上面

3、Struts的完成

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的阻攔器,假如類型轉換呈現錯誤,阻攔器擔任將錯誤封裝成表單錯誤(filederror),並將錯誤信息放入ActionContext中。

如何那麼改動默許類型轉換錯誤的錯誤提示信息?

辦法一:

首先創立一個資源文件Mess.properties,放在src上面
然後掩蓋xwork-core-2.3.31\com\opensymphony\xwork2\xwork-messages.properties外面的屬性xwork.default.invalid.fieldvalue。即在Mess.properties中寫入如下參數

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

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

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

辦法二:

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

總計

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved