2011-07-25 57 views
1

我想顯示一個頁面,用戶通過使用單選按鈕進行適當選擇,可以看到文本框或組合框。這是相對容易的,我設法通過下面的代碼來做到這一點:Ajax,條件呈現和支持beans

<h:selectOneRadio id="selection" value="#{inputMethod.choice}"> 
    <f:selectItem itemValue="#{inputMethod.TEXT}" itemLabel="textbox"/> 
    <f:selectItem itemValue="#{inputMethod.COMBO}" itemLabel="combobox" /> 
    <f:ajax event="click" execute="@this" render="@form" /> 
</h:selectOneRadio> 
<h:panelGroup id="Textbox" rendered="#{inputMethod.choice==inputMethod.TEXT}"> 
    <h:outputLabel>Textbox:</h:outputLabel> 
    <h:inputText value="#{myBean.somevalue}" /> 
</h:panelGroup> 
<h:panelGroup id="Combobox" rendered="#{inputMethod.choice==inputMethod.COMBO}"> 
    <h:outputLabel Combobox:/> 
    <h:selectManyListbox id="CommunityListbox" value="#{myBean.choices}"> 
    <f:selectItems value="#{myBean.selections}" var="u" itemValue="#{u.id}" itemLabel="#{u.name}"/> 
    </h:selectManyListbox> 
</h:panelGroup> 

我的問題是,組合框設置器永遠不會被調用。 事實上,setter僅被默認渲染的組件調用(在這種情況下,只要inputMethod.choice==inputMethod.TEXT)。如果我刪除了條件渲染,所有的設置器都會按照預期調用。

任何想法或答案將不勝感激!

PS:我使用JSF2.0,Glassfish的3.1,Netbeans的7.0(如果這是任何意義)

回答

1

您需要確保#{inputMethod.choice}處理表單提交的請求期間評估一模一樣它在請求顯示錶單時做了。最簡單的方法是將bean放入視圖範圍或將初始化邏輯移動到請求範圍bean的(後)構造函數中。