2011-11-24 54 views
0

不會激發我有下面的代碼和平:valueChangeListener當渲染/禁用屬性添加

 <h:selectOneMenu id="countrycode" 
       styleClass="Width300" 
       value="#{customer.countrycode}" 
       valueChangeListener="#{customer.countrycodechange}" 
       onchange="submit()" 
       immediate="true" 
       rendered="#{customer.validcountry}"> 
       <f:selectItem itemValue="None" 
        itemLabel="-------Select a Country------" /> 
       <f:selectItem itemValue="AU" itemLabel="Australia" /> 
       <f:selectItem itemValue="NZ" itemLabel="New Zealand" /> 
     </h:selectOneMenu> 

的ValueChangeListener只能如果我離開了渲染的屬性,與渲染屬性countrycodechange永遠不會被解僱了!有沒有解決的辦法?

添加disabled屬性也是如此,該屬性阻止valueChangeListener發射。我的valueChangeListener大豆有:

public void countrycodechange (ValueChangeEvent vce) { 

     PhaseId phaseId = vce.getPhaseId(); 
     if (phaseId.equals(PhaseId.ANY_PHASE)) 
     { 
      vce.setPhaseId(PhaseId.UPDATE_MODEL_VALUES); 
      vce.queue(); 
     } 
     else if (phaseId.equals(PhaseId.UPDATE_MODEL_VALUES)) 
     { 
      ... 

任何幫助,將不勝感激。當他們的rendereddisabled屬性分別評估以truefalse期間形式提交

回答

2

輸入組件將只被處理。因此,您需要確保#{customer.validcountry}在提交表單時與在顯示錶單時所做的相同。顯然在你的情況下,bean是請求作用域或isValidcountry()取決於請求作用域參數,它在表單提交期間未正確保存。您需要確保您在表單提交期間保持相同的條件。

在JSF 2.0中,這是將bean放入視圖範圍而不是請求範圍的問題。然而,看到你的valueChangeListener黑客,我認爲你仍然在使用尚未具有視圖範圍的JSF 1.x。如果沒有看到其他代碼,很難提出正確的解決方案。至少對我來說,在「是一個有效的國家?」上有一個渲染屬性是沒有意義的。而輸入組件本身應該選擇一個有效的國家。