文章目錄
採用基本類型接收請求參數
(get/post)
在Action類中定義與請求參數同名的屬性,struts2便能自動接收請求參數並賦予給同名屬性。
請求路徑: http://localhost:8080/test/view.action?id=78
public class ProductAction {
private Integer id;
public void setId(Integer id) {//struts2通過反射技術調用與請求參數同名的屬性的setter方法來擷取請求參數值
this.id = id;
}
public Integer getId() {return id;}
}
採用複合類型接收請求參數
請求路徑: http://localhost:8080/test/view.action?product.id=78
public class ProductAction {
private Product product;
public void setProduct(Product product) { this.product = product; }
public Product getProduct() {return product;}
} Struts2首先通過反射技術調用Product的預設構造器建立product對象,然後再通過反射技術調用product中與請求參數同名的屬性的setter方法來擷取請求參數值。 自訂類型轉換器
java.util.Date類型的屬性可以接收格式為2009-07-20的請求參數值。但如果我們需要接收格式為20091221的請求參數,我們必須定義類型轉換器,否則struts2無法自動完成類型轉換。
import java.util.Date;
public class HelloWorldAction {
private Date createtime;
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
}
public class DateConverter extends DefaultTypeConverter {
@Override public Object convertValue(Map context, Object value, Class toType) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
try {
if(toType == Date.class){//當字串向Date類型轉換時
String[] params = (String[]) value;// Request.getParameterValues()
return dateFormat.parse(params[0]);
}else if(toType == String.class){//當Date轉換成字串時
Date date = (Date) value;
return dateFormat.format(date);
}
} catch (ParseException e) {}
return null;
}
}
將上面的類型轉換器註冊為局部類型轉換器:
在Action類所在的包下放置ActionClassName-conversion.properties檔案,ActionClassName是Action的類名,後面的-conversion.properties是固定寫法,對於本例而言,檔案的名稱應為HelloWorldAction-conversion.properties 。在properties檔案中的內容為:
屬性名稱=類型轉換器的全類名
對於本例而言, HelloWorldAction-conversion.properties檔案中的內容為:
createtime= com.jim.conversion.DateConverter
自訂全域類型轉換器
將上面的類型轉換器註冊為全域類型轉換器:
在WEB-INF/classes下放置xwork-conversion.properties檔案 。在properties檔案中的內容為:
待轉換的類型=類型轉換器的全類名
對於本例而言, xwork-conversion.properties檔案中的內容為:
java.util.Date= com.jim.conversion.DateConverter
可以使用struts2架構內建的類型轉換器StrutsTypeConverter
public class User2Converter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
String val=values[0];
StringTokenizer st=new StringTokenizer(val, ";");
String username=st.nextToken();
String password=st.nextToken();
User user=new User();
user.setUsername(username);
user.setPassword(password);
return user;
}
@Override
public String convertToString(Map context, Object o) {
User user=(User) o;
String username=user.getUsername();
String password=user.getPassword();
return "username:"+username+",password:"+password;
}
}