2011-01-13 2 views
0

Здравствуйте, я хотел бы спросить, если вы можете назначить массивы фасолью в качестве формыNullValueInNestedPathException для Bean [] класса связывания

, например, у меня есть форма:

PageForm{ 
    Group[] groupArray; 

    Group[] getGroupArray(){ 
     return groupArray; 
    } 

    void setGroupArray(Group[] groupArray){ 
     this.groupArray = groupArray; 
    } 
} 

Group{ 
    boolean isChecked; 

    boolean getIsChecked(){ 
    return isChecked; 
    } 

    void setIsChecked(boolean ischecked){ 
     this.isChecked = ischecked; 
    } 
} 

Идентификатор как получить доступ к этому групповой массив в моей jsp. я могу это сделать с помощью этого:

<spring:form> 
    <spring:checkbox path="groupArray[0].isChecked" /> 
    <spring:checkbox path="groupArray[1].isChecked" /> 
    <spring:checkbox path="groupArray[2].isChecked" /> 
</spring:form> 

Что я получаю исключение:

org.springframework.beans.NullValueInNestedPathException: Недопустимое свойство 'groupArray [0]' из боб класса [ PageForm]: не удается получить доступ к индексированной стоимости объектов собственности, в пути индексированного свойства 'groupArray [0]: возвращается нуль

Пожалуйста, помогите мне.

Спасибо.

ответ

0

Проблема в том, что Group[] groupArray не был инициализирован, поэтому, когда он переходит к массиву и ищет объект Group в позиции 0, он не может найти объект Group.

Если вы заранее знаете количество объектов, которые могут быть в массиве, вы можете вставить столько объектов группы, сколько необходимо в массиве groupArray, в конструкторе PageForm.

Если вы не знаете, сколько объектов у вас будет в массиве (потому что вы создадите их из данных, поступающих из формы), вам необходимо предоставить способ создания новых объектов группы, если объект ранее не был создан в этой позиции. Я думаю, что самый простой способ - изменить ваш массив Group[] на List<Group> и использовать ленивый список, например Spring AutoPopulatingList, коллекции Apache Commons LazyList или тот, который предоставляет библиотека Guava.