2012-05-24 47 views
1

我動態地添加一個h:selectOneMenu頁面。但對於f:ajaxlistener方法不會被調用爲selectItems的,但如果h:selectOneMenu已經從一開始就加入到網頁它的工作(不使用動態update屬性添加)。 我的代碼如下:F:AJAX監聽器動態地添加小時內未能:selectOneMenu用於

(後@修正丹尼爾的建議)

<h:commandButton value="Watch"> 
      <f:ajax render="deptsSelBox"/> 
      <f:setPropertyActionListener value="#{true}" target="#{listRetriever.allow}" /> 
    </h:commandButton> 

    <h:panelGroup id="deptsSelBox"> 
     <h:selectOneMenu id="deptsSel" rendered="#{listRetriever.allow}" value="#{listRetriever.reqId}"> 
      <f:selectItems value="#{listRetriever.list}" /> 
      <f:ajax listener="#{listRetriever.retrieve()}" execute="deptsSel" /> 
     </h:selectOneMenu> 
    </h:panelGroup> 

回答

1

h:commandButton沒有得到update屬性,貌似primefaces的混合和純JSF(update屬性是從p:commandButton

f:ajax添加到您的commandButton並使用render屬性

<h:commandButton value="Watch"> 
     <f:ajax render="deptsSelBox"/> 
     <f:setPropertyActionListener value="#{true}" target="#{listRetriever.allow}" /> 
</h:commandButton> 

還解決您的選擇AJAX這個

<f:ajax listener="#{listRetriever.retrieve}" update="deptsSel"/> 

,並嘗試改變範圍從requestview

另一種方法是設置的allow值的方法裏面,像這樣(你也可以發送它作爲參數)

<h:commandButton value="Watch" action="listRetriever.updateAllow"> 
     <f:ajax render="deptsSelBox"/> 
</h:commandButton> 


public void updateAllow(){ 
    allow = true; 
} 
+0

是正確的我正在使用primefaces,但即使糾正後,f:ajax(第二個)仍然失敗動態添加'h:selectOneMenu'。請注意,'h:selectOneMenu'已成功添加到頁面中,但是f:ajax仍然不能用於selectItems。 –

+0

更新我的回答, 也發表您檢索代碼 – Daniel

+0

關於你的建議,以供選擇'F:ajax',我不能更新'deptsSelBox'再次,因爲bean不再可用,它只是在selectOneMenu被渲染後不久被請求作用域和被刪除。順便說一句,爲什麼我需要再次更新'deptSelBox'! –