详解Struts2的类型转换(2)

本文介绍如何在Struts2框架中通过配置文件指定集合元素的类型,包括List和Map类型的处理方式,确保不同类型的数据能被正确转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三、指定集合元素的类型

前面的基于OGNL表达式的类型转换器都指定了集合泛型,Struts2就可以通过反射来创建对应类的对象,并且将这些对象添加到集合中。

我们现在需要思考一下:如果不使用泛型,Struts2肯定是不知道如何处理集合类型的属性的。但是Struts2允许开发者通过局部转换文件来指定集合元素的类型。类型转换文件就是一个properties文件,内容就是类型转换的相关配置信息

我们指定LoginAction.java如下:

public class LoginListAction extends ActionSupport{
	private List users;
	public List getUsers() {
		return users;
	}
	public void setUsers(List users) {
		this.users = users;
	}
	
	@Override
	public String execute() throws Exception {
		System.out.println(getUsers());
		// 获取list集合的第一个对象
		User fisrtUser = (User) getUsers().get(0);
		if(fisrtUser.getUsername().equals("rgx")
				&&fisrtUser.getPassword().equals("lj")){
			addActionMessage("登录成功");
			return SUCCESS;
		}
		addActionError("登录失败");	
		return ERROR;
	}
}

 

上面的代码中我们没有为users属性指定泛型。下面就需要通过配置局部类型转换文件的形式来指定处理users属性里集合元素的类型。局部配置文件的命名规则是:ActionName-conversion.proeprties形式,例如下面的

LoginAction-conversion.properties配置文件:

Element_users=edu.ctgu.action.ognl.User

 

上面的key-value遵循的格式是这样的,Element_<ListPropName>=<ElementType>,<ListPropName>是List集合属性的名称,<ElementType>是集合元素的类型。这样就可以很好的理解上面配置文件的意义了。

 

但是对于Map类型的属性就不一样了,这样吧,我们还是先来看看,LoginAction.java吧

public class LoginMapAction extends ActionSupport{
	private Map users;

	public Map getUsers() {
		return users;
	}

	public void setUsers(Map users) {
		this.users = users;
	}
	@Override
	public String execute() throws Exception {
		System.out.println(getUsers());
		User secondUser = (User) users.get("one");
		if(secondUser.getUsername().equals("rgx")
				&&secondUser.getPassword().equals("lj")
				)
		{
			addActionMessage("登录成功");
			return SUCCESS;
		}
		addActionMessage("登录失败");
		return ERROR;
	}
}

 

Map集合比List集合相对复杂,需要同时指定Map的key值和value值类型。所以我的配置文件如下

Key_users=java.lang.String
Element_users=edu.ctgu.action.ognl.User

 

上面的配置文件中遵循的规则如下

Key_<MapPropName>=<KeyType>

Element_<MapPropName>=<ValueType>

理解上面的List的配置信息规则,这一套规则也就一点就通了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值