2013-03-13 57 views
0

我有幾種形式像這樣在同一頁上:幾個選擇的菜單,A4J支持,只有最後一個工作

<h:form> 
    <h:selectOneMenu value="#{collectionBean.selectedCollection}"> 
     <f:selectItems value="#{collectionBean.collectionItems}" /> 
     <a4j:support event="onchange" /> 
    </h:selectOneMenu> 
    <a4j:commandButton value="Add" action="#{collectionBean.addToCollection(_resource)}" > 
    </a4j:commandButton> 
</h:form> 

這裏是我的豆:

@Name("collectionBean") 
@Scope(ScopeType.SESSION) 
public class CollectionBean { 
    private String selectedCollection; 

    public String getSelectedCollection() { 
     return selectedCollection; 
    } 

    public void setSelectedCollection(String collectionName) { 
     selectedCollection = collectionName; 
    } 

    public List<SelectItem> getCollectionItems() { 
     ... 
    } 

    public void addToCollection(Resource res) { 
     ... 
    } 
} 

表單關聯到資源_resource,其目標是讓用戶將資源添加到他選擇的集合中。

的問題是,只在頁面上最後一個表格的工作:改變在其他形式的選擇時,setSelectedCollection方法不會被調用。

你有什麼可能是錯誤的想法?

+1

你是說你在單個視圖已經多個組件,每個綁定到一個相同的bean的屬性?這有什麼意義?你不願意將它們綁定到一個單獨的bean屬性,以便你可以獲取單個值嗎? – BalusC 2013-03-13 11:20:01

+0

它是一個資源表,對於這些資源中的每一個,用戶都可以選擇一個集合來添加資源。我沒有在這裏顯示代碼,但表單中還有一個「添加」按鈕。 – eskaev 2013-03-13 11:58:15

+1

它看起來越來越像你的問題有哪些在這裏回答了同樣的原因:http://stackoverflow.com/questions/10972284/hselectonemenu-in-loop/10973440#10973440你多個組件綁定到一個bean財產,並以某種方式期待這個單一的財產可以一次神奇地持有多個值。 – BalusC 2013-03-13 12:00:26

回答

0

至於說here和評論,這是沒有意義的幾個組件綁定到一個bean屬性。所以我在後臺bean中使用了一個Map,資源ID是一個關鍵字。

<h:selectOneMenu value="#{collectionBean.selections[_resource.id]}"> 
    <f:selectItems value="#{collectionBean.collectionItems}" /> 
    <a4j:support event="onchange" /> 
</h:selectOneMenu> 

不過,它沒有解決主要問題:只有頁面上的最後一個表單工作。對於所有其他形式,方法getSelections從未被調用過。

然後,而是採用若干形式(一種形式爲每個選擇菜單),我使用單個englobing形式。我不知道爲什麼,但它的工作...

+0

*只有頁面上的最後一個表單工作*這是正常的HTML行爲,每個請求只能提交一個表單。 *然後,不是使用多個表單(每個選擇菜單一個表單),而是使用基於最後一個語句的單個表單*,這是針對您的問題的可能解決方案。 – 2013-03-13 14:32:36

+1

順便說一句,在這種情況下,您不應該將bean會話作用域,而是查看作用域。在CDI中,這可以使用[MyFaces CODI](http://myfaces.apache.org/extensions/cdi/)來實現。 – 2013-03-13 14:37:21

+0

也許,但沒有什麼能阻止我們在同一頁上有多種表單並獨立提交。 對於你是對的範圍,但我也使用這個bean來處理需要會話範圍的其他事情。另外,在刷新頁面時保持先前的選擇並不令人不快。 – eskaev 2013-03-13 15:18:32

相關問題