Bean []类绑定的NullValueInNestedPathException

时间:2011-01-13 10:14:45

标签: spring-mvc bindingsource bean-validation null

您好我想询问您是否可以将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;
    }
}

id喜欢在我的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]'   bean类[PageForm]:无法访问   引用的属性的索引值   在索引属性路径中   'groupArray [0]':返回null

请帮帮我。

感谢。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:-1)

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