2009-08-11 53 views
2

我有多個下拉菜單,使用我的JSF/ICEFaces應用程序更新對方,這取決於其他人的更新內容之一。ice:selectOneMenu發送錯誤的值

問題是菜單發送了錯誤的值。它似乎發送之前的值而不是當前的值!不知道爲什麼!

任何想法?

感謝,

<td> 
    <ice:selectOneMenu id="selectCurApplNm" 
     value="#{statsDisplayAndFilter.applIDFilterPhrase}" 
     disabled="#{statsDisplayAndFilter.disableCurrentApplIdNamesMenu}" 
     valueChangeListener="#{statsDisplayAndFilter.fetchEventNames}" 
     partialSubmit="true" immediate="true"> 
     <f:selectItem itemValue="" itemLabel="" /> 
     <f:selectItem itemValue="all" itemLabel="all" /> 
     <f:selectItems id="selectCurApplNmItems" 
     value="#{statsDisplayAndFilter.currentApplIdItems}" /> 
    </ice:selectOneMenu> 
    </td> 
</tr> 
<tr> 
    <td> 
    <ice:outputLabel for="SlctCompTyp" value="Event Name: " /> 
    </td> 
    <td> 
    <ice:selectOneMenu id="SlctCompTyp" 
     value="#{statsDisplayAndFilter.eventNameFilterPhrase}" 
     disabled="#{statsDisplayAndFilter.disableEventNamesMenu}" 
     valueChangeListener="#{statsDisplayAndFilter.fetchMethodNames}" 
     partialSubmit="true" immediate="true"> 
     <f:selectItem itemValue="" itemLabel="" /> 
     <f:selectItem itemValue="all" itemLabel="all" /> 
     <f:selectItems id="SlctcompTypeItms" 
     value="#{statsDisplayAndFilter.eventNameItems}" /> 
    </ice:selectOneMenu> 
    </td> 
</tr> 

回答

1

我發現的時候它調用valueChangeListener定義的方法的價值還沒有被綁定到適當的變量,所以我不得不使用事件變量獲得新的價值:

public void fetchEventNames(ValueChangeEvent e) throws SQLException{ 
    String filteringOptions = ""; 
    String newSelectedValue = e.getNewValue().toString(); 
     ..... 

這解決了這個問題

+1

的REAS因爲這是「直接」關鍵字。這會跳過JSF生命週期的某些階段,並在將*值從UI寫回模型之前觸發Event *。 – 2009-08-12 06:36:12