Struts2学习笔记(三)之StrutsTypeConversion

struts2自带的类型转换器StrutsTypeConversion

StrutsTypeConverter继承于DefaultTypeConverter父类,并提供了两个抽象方法

1)CovertFromString将页面对象转换为后台对象

2)CovertToString将后台对象转换为页面字符串

在具体实例中我们只要实现这两个抽象方法就可以实现类型转换。将Struts2学习笔记(二)中自定义的转化类用继承StrutsTypeConverter的类来实现。具体实现如下:

public class AddressConverter2 extends StrutsTypeConverter {

	@Override
	public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
		// TODO Auto-generated method stub
		StringTokenizer st=new StringTokenizer(arg1[0],",");
		Address address=new Address();
		address.setProvince(st.nextToken());
		address.setCity(st.nextToken());
		address.setDetails(st.nextToken());
		return address;
	}

	@Override
	public String convertToString(Map arg0, Object arg1) {
		// TODO Auto-generated method stub
		Address address=(Address)arg1;
		String province=address.getProvince();
		String city=address.getCity();
		String details=address.getDetails();
		String addr=province+","+city+","+details;
		return addr;
	}
}

以上讲到的是单个的Address类进行转换,一般用户的地址有多个,如何进行多个Address的转换呢。多个Address转换

1)定义一个multiaddress.jsp页面

<body>
<form action="multiAddressAction.action" method="post">
address1:<input type="text" name="<span style="color:#ff0000;">addresses</span>"><br>//注意name的名字要与MultiAddress中属性的名字相一致
address2:<input type="text" name="addresses"><br>
address3:<input type="text" name="addresses"><br>
<input type="submit" value="submit">
</form>
2)MultiAddressAction类,并配置相应的struts.xml文件

public class MultiAddressAction extends ActionSupport{
private List<Address> addresses;

public List<Address> getAddresses() {
	return addresses;
}

public void setAddresses(List<Address> addresses) {
	this.addresses = addresses;
}
@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}
}
3)定义MultiAddressConverter类,并配置MultiAddressAction-conversion.properties文件

public class MultiAddressConverter extends StrutsTypeConverter{

	@Override
	public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
		// TODO Auto-generated method stub
		List<Address> addresses=new ArrayList<Address>();
		for(String addr:arg1)
		{
		StringTokenizer st=new StringTokenizer(addr,",");
		Address address=new Address();
		address.setProvince(st.nextToken());
		address.setCity(st.nextToken());
		address.setDetails(st.nextToken());
		addresses.add(address);
		}
		return addresses;
	}

	@Override
	public String convertToString(Map arg0, Object arg1) {
		// TODO Auto-generated method stub
		List<Address> addresses=(List<Address>)arg1;
		StringBuffer buffer=new StringBuffer();
		for(Address address:addresses)
		{
			String addr=address.getProvince()+","+address.getCity()+","+address.getDetails();
			buffer.append(addr);
		}
		return buffer.toString();
	}

}
MultiAddressAction-conversion.properties

addresses=cn.sict.converter.MultiAddressConverter
4)输出页面output.jsp

<s:property value="addresses"/>


如果是全局的类型转换,则是在src目录下新建xwork-conversion.properties,文件的内容是待转换的类=转换器的名字。即 包名.Address=包名.AddressConverter。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值