2016-08-06 2 views
0

Я использую WebSphere 5.1.2 и думаю, что это Struts 1, но я не уверен.Struts не использует мой getter methd

Моя проблема заключается в следующем.

У меня в моей форме динамический список beanName beanName, с вводами типа текста.

Моя форма что-то вроде этого (не копировать & пасту, потому что это на виртуальной машине без интернета):

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: индекс: 3, размер : 0.

Анализируя консоль, я понял, Struts использует ArrayList.get, а не getBeanNameList, как вы можете видеть на картинке:

console error

Любые идеи?

+0

Похоже, вы получаете ошибку диапазона. Я предлагаю вам проверить эти ** на **, которые у вас есть. Все они великие кандидаты, чтобы быть причиной вашей ошибки. Контрольная точка и некоторая отладка наверняка помогут вам найти ошибку. –

+0

Спасибо, что ответили ed, но это проблема. Даже если я установил точку останова там, он не останавливается. –

+0

Я положил точку останова в Get get get getbainNameList(), и он останавливается, но не на Simple getter "public BeanName getBeanNameList (int index)" –

ответ

1

Я нашел проблему ...

Моя версия Struts слишком стар, и это действительно не использовать геттер и сеттер с индексом на siganture, он использует ArrayList.get, или что-то в этом роде.

Чтобы решить эту проблему, я создал скрытое поле с размером моего списка, а в методе сброса формы я просто установил размер списка.

Смежные вопросы