Struts没有使用我的getter方法

时间:2016-08-06 02:17:35

标签: java list websphere struts1 indexed

我正在使用WebSphere 5.1.2并认为它是Struts 1,但我不确定。

我的问题如下。

我在表单中有一个bean BeanName的动态列表,输入类型为text。

我的表单是这样的(无法复制和粘贴,因为它位于没有Internet的虚拟机上):

public class MyForm extends ActionForm implements Serializable {
    // Property
    private List beanNameList = new ArrayList();

    // Simple Getter
    public List getBeanNameList() {
        if (beanNameList == null) {
            beanNameList = new ArrayList();
        }
        return beanNameList ;
    }

    // Item Getter
    public BeanName getBeanNameList(int index) {
        if (beanNameList == null) {
            beanNameList = new ArrayList();
        }
        for (int i = beanNameList.size(); i <= index; i++) {
            beanNameList.add(new BeanName());
        }
        return (BeanName)contractList.get(index);
    }

    // Simple Setter
    public List setBeanNameList(List value) {
        return beanNameList = value;
    }

    // Item Setter
    public BeanName getBeanNameList(int index, BeanName value) {
        if (beanNameList == null) {
            beanNameList = new ArrayList();
        }
        for (int i = beanNameList.size(); i <= index; i++) {
            beanNameList.add(new BeanName());
        }
        contractList.set(index, value);
    }
}

当我提交表单时,收到IndexOutOfBoundsException:index:3,size:0。

分析控制台,我意识到Struts正在使用ArrayList.get,而不是getBeanNameList,如图所示:

console error

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我发现了问题...

我的Struts版本太旧了,它真的不使用带有siganture索引的getter和setter,它使用的是ArrayList.get,或类似的东西。

为了解决这个问题,我创建了一个隐藏字段,其大小与我的列表相同,在表单的重置方法上,我只是设置了列表的大小。