2014-12-03 56 views
0

我們使用Spring Webflow來處理某些帶有步驟的表單。在其中一個我們有一個動態元素列表(用戶可以添加更多的元素)。我們使用此代碼要做到這一點,和完美的作品:Spring Webflow不支持「自動增長」列表中的泛型?

@Data 
@Accessors(chain = true) 
public class AutoGrowList implements Serializable { 

    private static final long serialVersionUID = -1328646310268097912L; 

    @Getter 
    private final List<ConcreteItemView> data; 

    public AutoGrowList() { 
     data = new ArrayList<ConcreteItemView>(); 
    } 

    public AutoGrowList(List<ConcreteItemView> list) { 
     data = new ArrayList<ConcreteItemView>(list); 
    } 

    public int getSize() { 
     return data.size(); 
    } 

    public void setSize(int size) { 
     int index = data.size() - 1; 
     for (; index >= size; index--) { 
      data.remove(index); 
     } 
    } 
} 

正如你可以在代碼中看到,該列表元素的類型是ConcreteItemView。我們要重構這個類與其它元素使用它,使用泛型,像這樣:

@Data 
@Accessors(chain = true) 
public class AutoGrowList<T extends AbstractView> implements Serializable { 

    private static final long serialVersionUID = -1328646310268097912L; 

    @Getter 
    private final List<T> data; 

    public AutoGrowList() { 
     data = new ArrayList<T>(); 
    } 

    public AutoGrowList(List<T> list) { 
     data = new ArrayList<T>(list); 
    } 

    public int getSize() { 
     return data.size(); 
    } 

    public void setSize(int size) { 
     int index = data.size() - 1; 
     for (; index >= size; index--) { 
      data.remove(index); 
     } 
    } 
} 

但是......這不工作...它拋出一個java.lang.InstantiationException的一類Spring(Indexer.class)。 Spring Webflow不支持這種方式的泛型?

回答

0

最後,我們解決這個問題加入豆SpelExpressionParser,具有SpelParserConfiguration,給我們的語境:

<bean id="expressionParser" class="org.springframework.expression.spel.standard.SpelExpressionParser"> 
     <constructor-arg name="configuration"> 
      <bean class="org.springframework.expression.spel.SpelParserConfiguration"> 
       <constructor-arg name="autoGrowCollections" value="true" /> 
       <constructor-arg name="autoGrowNullReferences" value="true" /> 
      </bean> 
     </constructor-arg> 
    </bean>