Java SpringMVC绑定嵌套对象

Java SpringMVC绑定嵌套对象,java,spring,inner-classes,spring-form,Java,Spring,Inner Classes,Spring Form,我有一个下面类的实例,我想在from中编辑它,然后将它保存回后端 公共类嵌套类{ List inners=new LinkedList(); //接二连三 公共类内部类{ 私有字符串内字段; //接二连三 } } 编辑:编辑样本代码以满足@Slava Semushin的建议 当我实例化该类并将其传递给模型时,我可以使用以下jsp片段读取值: 但当我将其传回时,我得到以下例外情况: bean类[com.sodacrm.webapp.forms.NestedClass]的无效属性“inner

我有一个下面类的实例,我想在from中编辑它,然后将它保存回后端

公共类嵌套类{
List inners=new LinkedList();
//接二连三
公共类内部类{
私有字符串内字段;
//接二连三
}
}
编辑:编辑样本代码以满足@Slava Semushin的建议

当我实例化该类并将其传递给模型时,我可以使用以下jsp片段读取值:



但当我将其传回时,我得到以下例外情况:

bean类[com.sodacrm.webapp.forms.NestedClass]的无效属性“inners[0]:非法获取属性“inners”引发异常;嵌套异常为org.springframework.beans.NullValueInTestedPathException:bean类[com.sodacrm.webapp.forms.NestedClass]的属性“inners”无效:无法实例化属性类型[com.sodacrm.webapp.forms.NestedClass$InnerClass]要自动增长嵌套属性路径,请执行以下操作:java.lang.实例化异常:com.sodacrm.webapp.forms.NestedClass$InnerClass
org.springframework.beans.InvalidPropertyException:bean类[com.sodacrm.webapp.forms.NestedClass]的无效属性“inners[0]”:非法获取属性“inners”引发异常;嵌套异常为org.springframework.beans.NullValueInTestedPathException:bean类[com.sodacrm.webapp.forms.NestedClass]的属性“inners”无效:无法实例化属性类型[com.sodacrm.webapp.forms.NestedClass$InnerClass]要自动增长嵌套属性路径,请执行以下操作:java.lang.实例化异常:com.sodacrm.webapp.forms.NestedClass$InnerClass

我使用的实际类有3层,我不想将内部类放在单独的文件中,因为它们强烈地属于它们的外部类…

如何为
内部成员定义getter?检查它是否始终返回有效的列表:

List<InnerClass> inners = new LinkedList<InnerClass>();
List inners=new LinkedList();

public List<InnerClass> getInners() {
    if (inners == null) {
        inners = new LinkedList<InnerClass>();
    }
    return inners;
}
公共列表getInners(){
if(inners==null){
inners=新链接列表();
}
返回内部;
}

原因是内部类。Spring仅在给定内部类类型的情况下实例化内部类,该类没有对
NestedClass
实例的引用,因此实例化失败(因为
InnerClass
的实例只能存在于
NestedClass
实例的上下文中)

不幸的是,修复方法是将InnerClass移出NestedClass的范围,或者将其声明为静态内部类。此外,您不需要实例化inners列表,它将自动实例化为
ArrayList


这可能值得一看,因为它似乎是对Spring框架的一个很好的增强

你说得对,我忘了列清单了。但当我设置它时,同样的异常也会发生……仅供参考——当谈到数据绑定时,spring将创建集合的实例并自动增长其组件。不需要初始化集合。选中
DataBinder#setautologownestedpaths
(默认启用)。如果模型对象已正确初始化并且禁用了
autoGrowNestedPaths
,则绑定将起作用。但是,不可能以这种方式执行动态表单。任何原因
内部类
都没有定义为
静态
?可能是内部类不是静态的,或者缺少getter/setter,或者没有设置autogrow。尽管如此,使用transfer对象并没有什么丢脸的地方。一般来说,虽然干燥程度较低,但更安全,责任更单一。我面临着同样的问题,你是如何解决的?