数据类型转换器
Jsp提交的参数全部是string类型,struts2通过拦截器可以将String类型的参数自动转化成常用的数据类型,比如:数字、时间等,然后通过get和set方法设置到对应的action中的属性。
但是,有时候struts2默认的类型转换器不能符合我们的要求。这时候,需要我们进行自定义数据类型转换器。
下面是我们自定义数据类型转换器的步骤:
1. login.jsp页面内容:
<form action="User.action"> 用户名:<input type=text name=user.uname /> <br/> 生日:<input type=text name=user.birthday /> <br/> 年龄:<input type=text name=user.age /> <br/> <input type=submit value=登陆 /> </form> |
2.对应的bean:
package com.gao.vo;
import java.util.Date;
public class User { private String uname; private Date birthday; private int age;
//省略对应的get和set方法
public User(String uname, Date birthday, int age) { super(); this.uname = uname; this.birthday = birthday; this.age = age; }
public User() { } } |
3.UserConvertor自定义的类型转换器
package com.gao.convertor;
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.gao.vo.User;
public class UserConvertor extends StrutsTypeConverter {
@Override public Object convertFromString(Map context, String[] values /*使用字符串数组代表表单域的值,使用字符串数组是为了考虑最通用的情况! */ , Class toClass) { System.out.println("开始转化!"); User user = new User(); user.setUname(values[0]); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { user.setBirthday(sdf.parse(values[1])); } catch (ParseException e) { e.printStackTrace(); } user.setAge(new Integer(values[2]));
return user; }
@Override public String convertToString(Map arg0, Object arg1) {
return null; }
} |
4.在src下新建xwork-conversion.properties,配置全局转换器,内容如下:
com.gao.vo.User=com.gao.convertor.UserConvertor
5.Action中代码示例:
package com.gao.action;
import com.gao.vo.User; import com.opensymphony.xwork2.ActionSupport;
//使用ActionSupport可以大大简化开发 public class UserAction extends ActionSupport {
private User user;
public String execute() throws Exception{ System.out.println(user.getUname()); System.out.println(user.getBirthday());
return SUCCESS; }
public User getUser() { return user; }
public void setUser(User user) { this.user = user; }
} |
配置了类型转换器后,他会自动产生作用,不需要我们调用。
类型转换器一般像上面一样配置成全局转换器,如果想只对某个action起作用,可以在struts.xml中<action>元素中配置他的属性:converter即可。