2011-07-26 92 views
0

我試圖使用Spring將自定義對象的列表/ arraylist/hashmap/etc綁定到JSP中的表單。現在,控制器在referenceData()中創建兩個列表(布爾列表和自定義對象列表)的Map,並將其提供給使用這些值填充字段的表單。這些值是使用Hibernate從MySQL數據庫初始化的,並且所有工作都很好。在表單被初始化之前,該列表是已知的長度,因此該部分更容易。現在我想要做的就是正確綁定表單中的對象,這樣當發生更改時,我可以在onSubmit()(或適當的位置)檢測到,並相應地更新數據庫。我似乎無法在表單中正確地綁定它們,以便我可以看到所做的更改。我嘗試使用表單字段的列表作爲模型,但即使這樣也無法正常工作。我只需要以特定的方式注入列表?任何想法或例子在這裏?任何幫助將不勝感激。彈出列表綁定形式

更新:在拉爾夫的請求這裏是我使用的解決方案: 在我的數據對象類,我懶加載一個地圖使用MapUtils.lazyMap(),一個字符串鍵和其他自定義對象的值。另一個自定義對象只是一個包含List<String>和getters/setters的類。在相應的.jsp文件中,我只是嵌套幾個循環,首先使用loop.current.key然後loop2.current.value.paramsList來循環遍歷鍵,以循環使用該鍵的值。這並不是我在原始文章中所要求的,因爲我正在尋找更一般的解決方案,而懶惰的加載指向了正確的方向。

+0

你使用Spring 2還是3? – Ralph

+0

春季3,我想我現在可能已經解決了,如果我這樣做,我會更新我的初始文章。 – Matt

+0

'referenceData()'和'onSubmit()'它看起來像你使用的是舊的Spring 2(在Spring 3中已棄用)FormControllers – Ralph

回答

0

在Spring 2中,您需要Command對象中的一個特殊列表,如果列表中尚未包含此大小,則可以增加第x個元素事件。

要做到這一點的一種方法是使用LayzList來自commons-collections的裝飾器。

@Override 
protected Object formBackingObject(final HttpServletRequest request) 
            throws Exception { 
    List<PosterSelectionRow> posterSelectionRowList = LazyList.decorate(
      new ArrayList<PosterSelectionRow>(), 
      new PosterSelectionRowListFactory()); 
    return new PosterSelectionCommand(posterSelectionRowList); 
    //PosterSelectionCommand contains a list of selected poster rows 
} 

private static class PosterSelectionRowListFactory 
       implements org.apache.commons.collections.Factory { 

    /** Invoked if the list need a new element */ 
    public Object create() {    
     return = new PosterSelectionRow(); 
    } 
} 

當我記得正確的,有沒有這種東西廠的方式,但我不知道。

+0

不是我去的方向,而是一個很好的答案,謝謝! – Matt

+0

@Matt:你可能想發佈你的解決方案來幫助有同樣問題的人嗎? – Ralph

+0

更新,謝謝你的懶惰加載提示! – Matt