jsp提交的参数全部是String类型,struts2通过拦截器可以将String类型的参数自动转化成常用的数据类型,比如:数字、时间等,然后通过get和set方法设置到对应的Action中的属性。
但是,有时候struts2默认的类型转化器不能符合我们的要求。这时候我们需要自定义数据类型转化器。
下面是我自定类型转换器的步骤:
1,login.jsp页面内容:
</pre><pre name="code" class="html"><span style="color:#999900;"><form action="userAction">
<input name="user.uname" ><br>
<input name="user.birthday"><br>
<input name="user.age">
<input type="submit" value="提交">
</form></span>
2.对应的bean
<span style="color:#999900;">package com.text.bean;
import java.util.Date;
public class User {
private String uname;
private Date birthday;
private int age;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User() {
}
public User(String uname, Date birthday, int age) {
super();
this.uname = uname;
this.birthday = birthday;
this.age = age;
}
}
</span>
<span style="color:#999900;">package com.text.convertor;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.text.bean.User;
public class UserConvertor extends StrutsTypeConverter{
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {<span style="white-space:pre"> </span>\\使用字符串数组代表表单域的值
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) {
// TODO Auto-generated method stub
return null;
}
}</span>
com.text.bean.User=com.text.convertor.UserConvertor
5,Action中代码示例
<span style="color:#999900;">package com.text.Action;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
import com.text.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(user.getUname());
System.out.println(user.getBirthday());
return this.SUCCESS;
}
}</span>
<span style="color:#999900;"><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<constant name="struts.devMode" value="true"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="userAction" class="com.text.Action.UserAction">
<result name="success">/index.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>
<!-- Add packages here -->
</struts></span><span style="color:#006600;">
</span>
配置了类型转换器后,他会自动产生作用,不需要我们调用。
类型转换器一般像上面一样配置成全局转换器,如果想只对某个action起作用,可以在struts.xml中<action>元素中配置他的属性:converter即可。