如果不使用json提交,提交参数应该是这样的:“xxList[0]=a&&xxList[1]=b&&xxList[2]=c”

这样,当后台action中有getXxList() 和setXxList(List l)时,struts2就会自动把xxList组装起来。


如果提交的是“xxList[1]=b&&xxList[2]=c”呢?

我尝试过一次,这种情况也能够获取xxList,只不过 xxList.get(0)==null 而已。


如果List中的T不是java的基本类型,而是一个自定义的复杂对象呢?

首先,定义一个存放在List中的对象。

public class Father(){
    private String name;
    private int age;
                                                                                                                                                                                                                  
    public String getName(){
        return name;
    }
    public void setName(String n){
        this.name = n;
    }
    public int getAge(){
        return age;
    }
    public void setAge(int a){
        this.age = a;
    }
}

其次,提交的参数应该是“xxList[0].name=a&&xxList[0].age=10&&xxList[1].name=c&&xxList[1].age=23&&xxList[2].name=b&&xxList[2].age=32”

然后,问题来了。由于java会擦除泛型的定义,运行中的参数设定拦截器只会把List中的对象默认当做Object来处理。但是Object中显然没有setName和setAge的定义。怎么办呢?

struts2提供了一个配置文件,用它可以告诉参数设定拦截器某个action的某个list中的元素应该是某某类的实例。这个配置文件如下所示。

文件路径:XXXAction.java相同路径下。

文件名:XXXAction-conversion.properties

Element_xxList=xxx.Father

当参数拦截器处理XXXAction中的xxList时,就能够按照文件中的配置对list中的元素进行正确的实例化了。


如果使用json提交呢?

参见另一篇博客,struts2的json操作。当然,要把两篇博客的内容关联起来看。