为了让系统知道List里的元素类型,为了让系统的类型转换器起作用,有两种方法:
1、使用泛型来限制集合里元素的类型;eg:在Action类代码中关于user属性的泛型定义为:private List<user> user;
2、使用Struts2的配置文件:使用局部类型转换的配置文件来指定集合元素的数据类型。
为了在局部类型转换文件中指定集合元素的类型,应该在局部类型转换文件中增加如下的key-value对:
Element_xxx = 复合类型 (说明:key-value对中的Element是固定的,xxx是Action中的集合属性名,复合类型是集合元素类型的全限定数类名[应该增加完整的包前缀])
eg:Element_user = lee.User //指定Action类的user集合属性的元素为lee.User实例
下面先介绍一下局部类型转换器的注册,要注册类型转换吕只需提供文件名为如下格式的文件:
ActionName-conversion.properties:ActionName是需要转换器第一次的Action的类名,后面的-conversion.properties字符串则是固定部分。
eg:对于LoginAcion.java类,则应该提供的类型转换器注册文件的文件名为:LoginAction-conversion.properties,该文件由key-value对组成。文件内容为: propertyName=类型转换器类
LoginAction-conversion.properties文件应该与LoginAction.java文件放在相同路径下(如LoginAction.java的包为lee,则该文件也应放在包lee内)。
这么多文字描述还是没有来一个实例要讲的清楚,要让人容易明白,嘿嘿,现在下面就来个实例看看吧!!
FeeItemAction.java
package lee;
public class FeeItemAction extends ActionSupport implements ServletRequestAware
{
private HttpServletRequest request;
private List<StkMasModel> modelList;//提交list
public String execute() throws Exception
{
FeeItem feeItem = new FeeItemImp();
if(modelList != null && modelList.size() > 0)
{
for(StkMasModel model:modelList)
{
feeItem = new FeeItemImp();
feeItem.setStkPkNo(model.getStk_pk());
feeItem.setCatName(model.getCatName());
feeItem.setCatPkNo(model.getCatPkNo());
feeItem.setStkName(model.getName());
itemService.saveOrUpdateFeeItem(feeItem);
}
}
else
{
log.warn("*********The size of model less than zero!********");
} }
public void setServletRequest(HttpServletRequest request)
{
this.request = request;
}
public List<StkMasModel> getModelList()
{
return modelList;
}
public void setModelList(List<StkMasModel> modelList)
{
this.modelList = modelList;
}
}
FeeItemAction-conversion.properties
Element_modelList=lee.StkMasModel
StkMasModel.java
package lee;
public class StkMasModel
{
private Long stk_pk;
private String catName;
private Long catPkNo;
private String name;
public String getCatName()
{
return catName;
}
public void setCatName(String catName)
{
this.catName = catName;
}
//省略了其它的get 和set...
}
list.jsp
<form action="saveFeeItems.html" id="saveFeeItemsForm" method="post">
<s:iterator status="st" value="#request.reList" id="stkList">
<input type="hidden" name="modelList[${st.index}].stk_pk" value=''>
<input type="hidden" name="modelList[${st.index}].catName" value=''>
<input type="hidden" name="modelList[${st.index}].catPkNo" value=''>
<input type="hidden" name="modelList[${st.index}].name" value=''>
</s:iterator>
<input type="submit" value="提交">
</form>
以上文件为对应关系。