關於DefaultTypeConverter工作原理以及totype參數


        大多數時候我們都用 StrutsTypeConverter來自定義類型轉換器的,一來好理解而且方便。


    今天自己寫代碼的時候使用的是DefaultTypeConverter這個類,其中有一個參數totype讓我很鬱悶,先貼代碼。

public class MyConversion extends DefaultTypeConverter{
	@Override
	public Object convertValue(Map<String, Object> context, Object value,
			Class toType) {
		
		if (toType == User.class) {
			String[] strings=(String[]) value;
			User user=new User();
			String[] param=strings[0].split(",");
			user.setUser(param[0]);
			user.setPassword(param[1]);
			System.out.println(2222);
			return user;
		}
		if (toType==String.class) {
			User user=(User) value;
			String string=user.toString();
			return string;
		}
		return null;
	}

}
     
public class PullAction extends ActionSupport{
	private User user;
	
	public void setUser(User user) {
		this.user = user;
	}
	public User getUser() {
		return user;
	}
	
	@Override
	public String execute() throws Exception {
		System.out.println(1111);
		return "aa";
	}

}

      讓我鬱悶的是totype是怎麼知道我要轉換到什麼類型的,上網查了很多資料也沒有明確說明,我只好自己做實驗一遍遍嘗試,最後還是弄明白了。

    首先說說類型轉換器的工作原理,大家應該大致就明白了

     從表單頁面提交到Action時會將參數傳到對應name的屬性了,在這之前會先檢查傳過來的參數是否是struts可以默認轉換的基本數據類型,如果是直接賦值,如果不是在Action裏找到該name是什麼數據類型,比如上面的Action,前臺傳過的字符串類型但是Action裏是User類型,這時候就要到Action包下面找是否有類型轉換器配置文件,若有就要配置文件指定的類下面執行類型轉換操作,此時totype就得到了需要轉換到的類型是User類型。

   大致就是這樣,有不同意見的歡迎補充。

發佈了21 篇原創文章 · 獲贊 28 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章