轉載自:http://www.itivy.com/java/archive/2012/3/6/634666475287515374.htmlhtml
一 轉換器的介紹java
Struts2的類型轉換器其實是基於OGNL實現的,在OGNL項目中有一個ognl.TypeConverter接口,這個接口就是實現類型轉換器必須實現的接口,實現類型轉換器必須實現上面的TypeConverter,不過上面的接口裏的方法過於複雜,因此OGNL項目還提供了一個該接口實現類:ognl.DefaultTypeConverter,經過繼承該類實現本身類型轉換器apache
二 實例分析詳解數組
1.aultTypeConverter的方法舉例:dom
package cn.csdn.hr.converter;jsp
import java.util.Map;ide
import cn.csdn.hr.domain.User;測試
import ognl.DefaultTypeConverter;this
public class UserConverter extends DefaultTypeConverter {spa
@Override
public Object convertValue(Map context, Object value, Class toType) {
// 根據toType判斷轉換的方向是不是從字符串轉換成對象
if (toType == User.class) {
// 系統請求參數的字符串,由於要包含多種類型
String values[] = (String[]) value;
// 建立User對象
User user = new User();
// 爲屬性賦值
user.setName(values[0]);
user.setAge(Integer.valueOf(values[1]));
// 返回
return user;
} else {
// 從對象轉換爲字符串
User user = (User) value;
return user.toString();
}
}
}
分析參數的含義:
ConvertValue方法的做用
該方法完成類型轉換,不過這種類型轉換是雙向的,當須要把字符串轉化對象實例時,經過該方法實現,當把對象實例轉換成字符串時也經過該方法實現。這種轉換是經過toType參數類型是須要轉換的目標類型。因此能夠根據toType參數來判斷轉換方向。
ConvertValue方法參數和返回意義
l 第一個參數:context是類型轉換環境的上下文
l 第二個參數:value是須要轉換的參數,根據轉換方向的不一樣value參數的值也是不同的。
l 第三個參數:toType是轉換後的目標類型
l 該方法的返回值是類型轉換後的值。該值的類型也會隨着轉換的方向的改變而改變。因而可知轉換的convertValue方法接受須要轉換的值,須要轉換的目標類型爲參數,而後返回轉換後的目標值
l Value爲何是一個字符串數組?
l 對於DefaultTypeConverter轉換器而言,它必須考慮到最通用的情形,所以他把全部請求參數都視爲字符串數組而不是字符串。至關於getParameterValues()獲取的參數值
2. 封裝User類,屬性爲name和age,必需要有無參構造,get和set方法,在這裏就很少說了。
3.在jsp頁面要傳值,代碼爲:
<body>
<div align="center">
<h1>瞭解struts2的類型轉化器,並寫出本身的類型轉化器</h1>
<form action="${pageContext.request.contextPath}/user/addUsers.action">
<!-- 把兩個input的name值都設爲user,傳過去以後當成數組轉換 -->
用戶名:<input type="text" name="user"/><Br/>
年齡:
<input type="text" name="user"/><Br/>
<input type="submit" value="測試"/><Br/>
</form>
</div>
</body>
4.配置struts.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="tsyser" extends="struts-default" namespace="/user">
<action name="addUsers" method="execute" class="cn.csdn.hr.action.UserAction">
<result>../index.jsp</result>
</action>
</package>
</struts>
5.配置UserAction.java,來接收值而且把接收的值經過自定義的轉換器轉換爲相應的類型
package cn.csdn.hr.action;
import cn.csdn.hr.domain.User;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
// 轉換器經過user屬性來
private User user;
public UserAction(User user) {
super();
this.user = user;
}
public UserAction() {
super();
// TODO Auto-generated constructor stub
}
public User getUser() {
return user;
}
//注入
public void setUser(
User user) {
System.out.println("set方法================");
this.user = user;
}
public String execute(){
System.out.println("user對象"+user);
System.out.println(user.toString());
return SUCCESS;
}
}
6.最重要的是要註冊局部類型轉換器,在和action一個包下注冊,名爲UserAction-conversion.properties,而且添加屬性:
user=cn.csdn.hr.converter.UserConverter
注意user就是在就是在jsp頁面中input中的name的值