大多數時候我們都用 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類型。
大致就是這樣,有不同意見的歡迎補充。