为了让系统知道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>
以上文件为对应关系。