struts2局部類型轉換器的使用。

當使用struts2的時候,如果傳遞的參數不符合action中的類型。
雖然struts會有自動的處理方式,讓數據能夠顯示出來,但數據並沒有傳遞到action中對應的變量中。

比如一個action中有一個Date的成員變量,其名字爲birthday.
你可以在result中訪問到birthday數據成員,但是並非傳遞給變量birthday的數據.

對此,我們也需要定義類型轉換器,以便讓傳入的數據能夠正確的轉換成我們需要的格式。

package cn.dzr.converter;

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

public class DateTypeConverter extends DefaultTypeConverter
{

	@Override
	public Object convertValue(Map<String, Object> context, Object value,
			Class toType)
	{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
	
		try
		{
			if(toType == Date.class)
			{
				String[] params = (String[])value;
				return sdf.parse(params[0]);
			}
			else if(toType == String.class)
			{
				Date date = (Date)value;
				return sdf.format(date);
			}
		}
		catch(ParseException e)
		{
			
		}
		return null;
	}
	
}

如上就是一個簡單的類型轉換器。
對於該類,需要注意兩個地方,

第一是其父類爲
com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
struts2中提供了多個類型轉換器,但是以此轉換器爲上品,所以通常情況下,請選擇該類。

第二則是if(toType == Date.class)
            {
                String[] params = (String[])value;
                return sdf.parse(params[0]);
            }
            else if(toType == String.class)
            {
                Date date = (Date)value;
                return sdf.format(date);
            }

在這段轉換代碼中,開始時候是通過string數組傳遞參數。這主要是考慮兼容性。因爲傳遞給action的數據,
可能具有多個值。比如用戶選擇興趣愛好,就可能存在多個值。當我們接受到用戶的瀏覽器請求的時候,可能其帶來
的參數就是一個字符串數組,而不是一個簡單的字符串。
所以,這裏通過數組的形式來處理這個字符串轉向日期格式的問題。

這裏的下面還有一個字符串轉爲日期的操作。
這種情況被稱爲雙向轉換器,因爲當你需要在JSP頁面中顯示你的非String數據的時候,也許你需要按照自己
要求,輸出日期的格式。


好了,在完成了類型轉換器類的編寫好。
我們就需要註冊該類型轉換器,讓其針對某個變量產生作用。我們這裏是局部的類型轉換器。
其具體的步驟如下:
在我們需要使用類型轉換器的action的包下
新建一個文件,文件名爲 actionname-conversion.properties
其內容爲
變量名= 類型轉換器的全路徑

如上面的例子,需要將其應用在cn.dzr.action.HelloWorldAction這個類中的birthday成員。
那麼,就需要在cn.dzr.action包下新建文件
HelloWorldAction-conversion.properties
其內容則是
birthday=cn.dzr.converter.DateTypeConverter

到此,類型轉換器就已經成功的註冊了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章