WEB页面提交的内容都是字符串,但对于Java后台来说就有多种类型。Struts2能自动的将页面表单提交的字符串类型转换成八种基本类型,或者Date类型、String类型等,而自定义类型的转换则可以自己通过代码显式的设定进行转换。
步骤如下:
1.新建完成类型转换类,继承DefaultTypeConverter类
复写其中的convertValue()方法:
eg.将页面表单中提交的”username;password”字符串转换为自定义的User类实例:
import java.util.Map;
import java.util.StringTokenizer;
import ognl.DefaultTypeConverter;
import simpleStruts2.bean.User;
public class UserConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Map context, Object value, Class toType) {
//类型转换方向有页面字符串转换为自定义类型对象,或自定义类型对象转换为字符串
//toType参数代表你需要转换的目标类型
//value参数是具体的需要转换的对象,如果value是页面往自定义类型转,则value应为String[]类型
if(User.class == toType){//从页面向后台对象转换
String[] str = (String[])value;
String firstValue = str[0];//取得页面提交的值
//等价于String[] st = firstValue.split(";");
StringTokenizer st = new StringTokenizer(firstValue,";");
String username = st.nextToken();
String password = st.nextToken();
User user = new User();
user.setUsername(username);
user.setPassword(password);
return user;
}
return null;
}
}
2.UserAction使用转换后的User对象
import com.opensymphony.xwork2.ActionSupport;
import simpleStruts2.bean.User;
public class UserAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
System.out.println("username:"+user.getUsername());
System.out.println("password:"+user.getPassword());
return SUCCESS;
}
}
3.通过属性文件配置User的转换信息找到对应的转换器类
4.测试: