struts2中关于list对象注入的问题

探讨了在Struts2框架中使用checkboxlist组件时遇到的值栈注入问题。当从JSP页面提交数据到Action时,发现提交的数据类型为Struts2自定义的XWorkList,而非预期的List<City>类型。

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

details.jsp页面上提供如下表单:

<%
	List<City> cities = new ArrayList<City>();
	cities.add(new City(1001,"gz"));
	cities.add(new City(1002,"sz"));
	cities.add(new City(1003,"wh"));
	
	request.setAttribute("cities", cities);
%>

<s:form action="save.action">	
	<s:checkboxlist list="#request.cities" 
			listKey="cityId" listValue="cityName"
				label="city^^" name="cities"></s:checkboxlist>
	<s:submit type="submit" value="tijiao"></s:submit>
</s:form>


struts.xml配置文件中配置action:


<action name="save" class="com.atguigu.struts2.valuestack.User"
		method="save">
	<result name="success">/details.jsp</result>
</action>


在User类中定义了setter方法:


public class User {
	private List<City> cities;//City类已经定义好了,有cityId和cityName两个属性,且有相应的getter和setter方法。
		...
	public void setCities(List<City> cities) {
		this.cities = cities;
		System.out.println(cities);
	}
	...
}


  按照struts2的运行流程,勾选中的选项应该可以构成一个list对象,通过setCities方法注入到cities属性中,但是跑起来却发现cities参数为空。
然后查看了一下cities的Class类型,发现是struts2自定义的继承自ArrayList的XWorkList类。只有将setCities方法的参数以及User的cities属性均修改为XWorkList才能完成注入。
    确实挺奇葩的!关键在于从jsp页面提交过来的是一个struts2自定义类型的对象,这就比较麻烦了。所以在开发中尽量简化jsp页面中表单的形式,一方面简洁明了,另一方面也便于struts2注入。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值