Bean []类绑定的NullValueInNestedPathException

问题描述 投票:0回答:2

您好我想询问您是否可以将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:bean类[PageForm]的属性'groupArray [0]'无效:无法访问索引属性路径'groupArray [0]'中引用的属性的索引值:返回null

请帮我。

谢谢。

spring-mvc bindingsource bean-validation null
2个回答
0
投票

问题是Group[] groupArray尚未初始化,因此当它转到数组并在位置0查找对象Group时,它找不到Group对象。

如果您事先知道数组中可以存在的对象数,则可以在PageForm的构造函数中的数组groupArray中插入所需数量的Group对象。

如果您不知道数组中有多少个对象(因为您将根据来自表单的数据创建它们),则需要提供一种在对象尚未创建时创建新Group对象的方法。之前在那个位置实例化。我认为最简单的方法是将你的Group[]数组更改为List<Group>,并使用像Spring AutoPopulatingList,Apache Commons Collections LazyList或库Guava提供的懒惰列表。


-1
投票

尝试更改您的属性名称,也可以是myChecked和getter / setter,例如getChecked和setChecked

© www.soinside.com 2019 - 2024. All rights reserved.