struts2的类型转换
意义:对于一个成熟的、智能的MVC框架而言,不可避免要实现类型转换。B/S结构应用请求参数是通过浏览器发送到服务器的,这些参数不可能有丰富的数据类型,因此必须在服务器端完成数据类型转换。
对于struts2有局部和全局的类型转换。
如何写:类型转换器需要继承StrutsTypeConverter方法,并重写其中的方法。
全局类型转换:需要创建一个xwork-conversion.properties文件,
该文件由多个“复合类型=对应的类型转换器”
一旦注册了上面的全局类型转换器,该全局类型转换器就会对所有的类型属性起作用。
写view界面:
<form action="AddressAction" method="post" >
用户名<input type="text" name="usDeAd.username"><br>
地 址<br>
<input type="text" name="usDeAd.address">省<br>
<input type="text" name="usDeAd.address">市<br>
<input type="text" name="usDeAd.address"> 区<br>
<input type="text" name="usDeAd.address">
(详细地址)
<input type="submit" value="提交">
</form>
写Model:
1、
package com.zmy.bean;
public class Address {
private String province;
private String city;
private String zone;
private String street;
public String getZone() {
return zone;
}
public void setZone(String zone) {
this.zone = zone;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public Address(String province, String city, String zone, String street) {
super();
this.province = province;
this.city = city;
this.zone = zone;
this.street = street;
}
public Address() {
super();
}
}
2、
package com.zmy.bean;
public class UserDetailsAddress {
private String username;
private Address address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public UserDetailsAddress(String username, Address address) {
super();
this.username = username;
this.address = address;
}
public UserDetailsAddress() {
super();
}
}
写Action
package com.zmy.action;
import com.opensymphony.xwork2.ActionSupport;
import com.zmy.bean.UserDetailsAddress;
@SuppressWarnings("serial")
public class AddressAction extends ActionSupport {
private UserDetailsAddress usDeAd;
public UserDetailsAddress getUsDeAd() {
return usDeAd;
}
public void setUsDeAd(UserDetailsAddress usDeAd) {
this.usDeAd = usDeAd;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.print(usDeAd.getUsername());
return SUCCESS;
}
}
写转换器
package com.zmy.conver;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.zmy.bean.Address;
public class AddressTypeConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map content, String[] values, Class toClass) {
// TODO Auto-generated method stub
if(toClass.equals(com.zmy.bean.Address.class)){
String province=values[0];
String city=values[1];
String onze=values[2];
String street=values[3];
Address address=new Address(province,city,onze,street);
return address;
}
return null;
}
@Override
public String convertToString(Map arg0, Object arg1) {
// TODO Auto-generated method stub
return null;
}
}
写xwork-conversion.properties
com.zmy.bean.Address=com.zmy.conver.AddressTypeConverter
这样一个全局类型转换就写好了