簡體   English   中英

Spring MVC綁定嵌套對象

[英]Spring MVC binding nested objects

我有一個以下類的實例,我想在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級深度,我不想將內部類放在單獨的文件中,因為它們非常屬於他們的外部類...

你如何為inners成員定義吸氣劑? 檢查它是否總是返回有效列表:

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

要么

public List<InnerClass> getInners() {
    if (inners == null) {
        inners = new LinkedList<InnerClass>();
    }
    return inners;
}

原因是內在階級。 Spring實例化內部類純粹給定內部類類型,此類沒有對NestedClass實例的引用,因此實例化失敗(因為InnerClass實例只能存在於NestedClass實例的NestedClass

不幸的是,修復是將InnerClass移出NestedClass的范圍或將其聲明為靜態內部類。 此外,您不需要實例化內部列表,它將自動實例化為ArrayList

這可能值得Jira票,因為它似乎是對Spring框架的一個很好的增強。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM