Struts2 的類型轉換,對於 8 個原生數據類型以及 Date,String 等
常見類型,Struts2 可以使用內建的類型轉換器實現自動的轉換;
但對於自定義的對象類型來說,就需要我們自己指定類型轉換的
方式了。對於自定義的類型轉換器來說需要提供 3個信息:Action的名字、
Action 中待轉換的屬性名以及該屬性對應的類型轉換器。其中
Action的名字是通過屬性文件名來獲得的、 Action中待轉換的屬性
名是通過屬性文件中的 key來獲得的,該屬性對應的類型轉換器是
通過該key所對應的 value來獲得的。
關鍵代碼
jsp
“`
使用分號隔開用戶名與密碼信息
<form action="userAction">
<input type="text" name="user"><br/>
<input type="submit">
</form>
</div>
useraction
“`public class UserAction extends ActionSupport {
private User user;
private List<User> users;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
@Override
public String execute() throws Exception {
System.out.println("name"+user.getName());
System.out.println("password"+user.getPassword());
return SUCCESS;
}
public String userlist() throws Exception {
return SUCCESS;
}
}
類型轉換器
public class UserTypeCoverter extends DefaultTypeConverter{
@Override
public Object convertValue(Map context, Object value, Class toType) {
if(User.class==toType){ //從頁面想後臺轉換
String[] values = (String[])value;
String firstvalue = values[0];
StringTokenizer st =new StringTokenizer(firstvalue, ";");
String name = st.nextToken();
String password = st.nextToken();
return new User(name,password);
}else if(String.class.equals(toType)){//從後臺想前臺轉換
User u = (User)value;
return u.toString();
}
return super.convertValue(context, value, toType);
}
}
配置文件名稱(UserAction-conversion.properties)這個非常重要actionname+-conversion.properties
user=com.wfg.UserTypeCoverter
user=com.wfg.UserTypeCoverter2
users=com.wfg.UsersTypeCoverter
———-思考一刻
如果是多個user 應該如何?自行思考
- 可以使用 Struts2 框架自帶的類型轉換器 StrutsTypeConverter 簡化
類 型 轉 換 代 碼 的 編 寫 , StrutsTypeConverter 繼 承 於
DefaultTypeConverter 父 類 , 並 且 提 供 了 兩 個 抽 象 方 法 :
convertFromString與convertToString,分別表示從頁面的字符串轉
換爲後臺對象以及從後臺對象轉換爲頁面的字符串,我們只需實
現這兩個抽象方法即可實現類型轉換。
public class UserTypeCoverter2 extends StrutsTypeConverter {
@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
String[] values = (String[])arg1;
String firstvalue = values[0];
StringTokenizer st =new StringTokenizer(firstvalue, ";");
String name = st.nextToken();
String password = st.nextToken();
return new User(name,password);
}
@Override
public String convertToString(Map arg0, Object arg1) {
User u = (User)arg1;
return u.toString();
}
}
- 全局類型轉換。在src目錄下新建xwork-conversion.properties,該
文件的內容是待轉換的類=轉換器的名字,即
com.wfg.User=com.wfg.UserConverer2