我有一个以下类的实例,我想在from中编辑,然后将其保存在后端。
public class NestedClass {
List<InnerClass> inners = new LinkedList<InnerClass>();
//getter and setter
public class InnerClass {
private String innerField;
//getter and setter
}
}
编辑:编辑的示例代码符合@Slava Semushin的建议。
当我实例化该类并将其传递给模型时,我可以使用以下jsp片段读取值:
<form:input path="inners[0].innerField" /><br/>
<form:input path="inners[1].innerField" /><br/>
但是当我把它传回来时,我得到以下例外:
Invalid property 'inners[0]' of bean class [com.sodacrm.webapp.forms.NestedClass]: Illegal attempt to get property 'inners' threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property 'inners' of bean class [com.sodacrm.webapp.forms.NestedClass]: Could not instantiate property type [com.sodacrm.webapp.forms.NestedClass$InnerClass] to auto-grow nested property path: java.lang.InstantiationException: com.sodacrm.webapp.forms.NestedClass$InnerClass
org.springframework.beans.InvalidPropertyException: Invalid property 'inners[0]' of bean class [com.sodacrm.webapp.forms.NestedClass]: Illegal attempt to get property 'inners' threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property 'inners' of bean class [com.sodacrm.webapp.forms.NestedClass]: Could not instantiate property type [com.sodacrm.webapp.forms.NestedClass$InnerClass] to auto-grow nested property path: java.lang.InstantiationException: com.sodacrm.webapp.forms.NestedClass$InnerClass
我正在使用的真正课程是3级深度,我不想将内部课程分成不同的文件,因为它们非常属于他们的外部课程......
答案 0 :(得分:0)
如何为inners
成员定义getter?检查它是否总是返回有效列表:
List<InnerClass> inners = new LinkedList<InnerClass>();
或强>
public List<InnerClass> getInners() {
if (inners == null) {
inners = new LinkedList<InnerClass>();
}
return inners;
}
答案 1 :(得分:0)
原因是内在阶级。 Spring实例化内部类纯粹给定内部类类型,此类没有对NestedClass
实例的引用,因此实例化失败(因为InnerClass
的实例只能存在于NestedClass
)实例的上下文
不幸的是,修复是将InnerClass移出NestedClass的范围或将其声明为静态内部类。此外,您不需要实例化内部列表,它将自动实例化为ArrayList
。
这可能值得Jira票,因为它似乎是对Spring框架的一个很好的增强。