在struts2里一般用标签struts-tags可以取得action里的List,只需要在jsp的属性和action属性映射起来就可以了。
但对于list的映射还是有一点需要注意到地方。
1. Action里List定义要用泛型
如: ShoppingCartAction的orderDetails,
public class ShoppingCartAction extends ActionSupport {
private Collection<OrderDetail> orderDetails;
Jsp取
<s:iterator value="orderDetails">
<tr>
<td><input type="checkbox" name="productcode" value="${product.productcode}">${product.productcode}
<td><input type="text" name="orderDetail.quantityordered" value="${quantityordered}"></td>
</tr>
</s:iterator>
list泛型类, 取值只需要属性名(quantityordered), 而类里的类需要加类名和属性名(product.productcode)
而jsp提交以后映射Action里的属性, 就需要加类名和属性名(name="orderDetail.quantityordered")
2. 数据类型转换
Struts2自带了一些类型转换器,可以对HTTP字符串和下列 JAVA类型进行转换(自动进行):
1) String
2) Boolean/Boolean:true和false字符串可以被转换成布尔值的原始类型有包装类.
3) Character/char:
4) Integer/int,Float/float,Long/long,Double/double
5) Date:当前Locale的SHORT格式的字符串,如:98/10/11
6) Array:
7) List:默认使用String填充.
8) Map:默认使用String填充.
例子:
3) List
用法和数组一模一样.只不过JAVA中是List但注意,这里最好是用泛型来声明.不然它会自动将参数转换成String类型并存入List. 泛型用法:
<input name=”names[0].username” />
<input name=”names[1].username” />
接收:List<User> names
第一个User的username为第一个input提交的值…
4)Map
和list不同,Map需要一个键,一个值.如:
<input name=”nameMap.mary” />
<input name=”nameMap.hellen” />
<input name=”nameMap[‘Sunyu’]” />
上面一种用点语法,一种用方括号.但两种意思一样,当我们提交上面表单后,后台获得的值如下:
Map<String,String> nameMap;值为:
mary --- >第一input提交的值.
hello --- >第二input提交的值.