开发者

NullValueInNestedPathException for Bean[] class binding

Hello I'd like to ask if you can assign arrays of beans as a form

for example i have a form:

 PageForm{
   Group[] groupArray;

   Group[] getGr开发者_C百科oupArray(){
      return groupArray;
   }

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

Group{
   boolean isChecked;

   boolean getIsChecked(){
   return isChecked;
  }

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

id like to access this group array in my jsp. can i do that using this:

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

What i get is an exception:

org.springframework.beans.NullValueInNestedPathException: Invalid property 'groupArray[0]' of bean class [PageForm]: Cannot access indexed value of property referenced in indexed property path 'groupArray[0]': returned null

Please help me.

Thanks.


The problem is that Group[] groupArray has not been initialized, so when it goes to the array and looks for the object Group at position 0 it cannot find the Group object.

If you know in advance the number of objects which there can be in the array you can insert as many Group objects as you need in the array groupArray in the constructor of PageForm.

In case you don't know how many object you'll have in the array (because you'll create them from data coming from a form) you'll need to provide a way to create new Group objects when the object has not been instantiated in that position before. I think the easiest way toget this is to change your Group[] array to a List<Group> and use a lazy list like Spring AutoPopulatingList, Apache Commons Collections LazyList or the one provided by the library Guava.


try to change your attribute name maybe myChecked and getter/setter as well e.g. getChecked and setChecked

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜