Struts2學習筆記(八):請求參數的接收和自訂類型轉換器

來源:互聯網
上載者:User
文章目錄
  •  
採用基本類型接收請求參數 (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;
}

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.