2014-09-19 26 views
0

我遇到了PrimeFaces的問題。這裏是我的XHTML代碼:PrimeFaces selectOneMenu在valueChangeListener和ajax監聽器中都有空的新值

<p:selectOneMenu value="#{gCnewObjectBean.grille.branche}" 
    valueChangeListener="#{gCnewObjectBean.brancheChangedListener}" 
    update=":contentform :popup"> 
    <f:selectItems value="#{gCnewObjectBean.branche}" /> 
    <p:ajax update=":contentform :popup" 
     listener="#{gCnewObjectBean.brancheChangedListener}" /> 
</p:selectOneMenu> 

這裏是我的豆代碼:

public void brancheChangedListener(ValueChangeEvent event) { 
    Integer branche = (Integer) event.getNewValue(); 
    // do populate the second select menu based on this value 
} 
public void brancheChangedListener(AjaxBehaviorEvent event) { 
    SelectOneMenu selectMenu = (SelectOneMenu) event.getSource(); 
    Integer branche = (Integer) selectMenu.getSubmittedValue(); 
    // do populate the second select menu based on this value 
} 

生成的HTML代碼是有點怪與primefaces的HTML選擇組件是隱藏的。但是,如果我與螢火蟲看到它,它看起來像這樣:

<select id="branche_input" name="branche_input"> 
    <option value="0"></option> 
    <option value="1">Prestations prévoyance professionnelle</option> 
    <option value="2">Prestations prévoyance privée</option> 
    <option value="3">Prestations PRIRENT</option> 
    <option value="4">Gestion prévoyance professionnelle</option> 
</select> 

這個代碼是測試由BalusC上this post描述的兩種解決方案(valueChangeListenerf:ajax)的方式。

當我改變選擇菜單中的值時,兩個監聽器都被觸發,首先是valueChangeEvent,然後是AjaxBehaviorEvent,這完全是我基於BalusC後期發現的。但是這兩種bean方法對於新值都會得到一個「空值」(使用調試器,我可以看到ValueChangeEvent中的舊值爲「0」,根據我的selectItems,這是正確的)。

解決此問題的任何線索?我真的不明白,我看見我使用幾個時間在這個網站的代碼...

技術信息:JBoss的EAP 6.0,鑽嘴魚科2.1.7-JBoss的,PrimeFaces 4.0

編輯:我是想知道這是否是JBoss中嵌入的jsf-impl庫中的一個bug。我更新到Mojarra 2.1.18-jboss,但問題是嚴格相同的:一個null值通過ajax監聽器放入我的grille對象中,並且getNewValue()對象也返回對象的valueChangeEvent

回答

1

首先,我認爲你的f:selectItems標籤有問題。嘗試設置項目值,併爲它itemLabel屬性:(?我覺得gCnewObjectBean.branche不是integerList,是)

<p:selectOneMenu value="#{gCnewObjectBean.grille.branche}" 
    valueChangeListener="#{gCnewObjectBean.brancheChangedListener}" 
    update=":contentform :popup"> 
    <f:selectItems value="#{gCnewObjectBean.brancheList}" var="item" 
     itemValue="#{item.branche}" itemLabel="#{item.label}"/> 
    <p:ajax update=":contentform :popup" 
    listener="#{gCnewObjectBean.brancheChangedListener}" /> 

您嘗試與getSubmittedValue獲取所選值()方法無法工作。 getSubmittedValue沒有返回你期望的值:

Why can I not get the submitted value from component binding?

如果這不是解決你的問題,你可以嘗試把一個p:messages標籤在你的JSF頁面。可能有錯誤不會顯示在控制檯中。

+0

我的代碼中存在兩個不同的問題,一個用我提供的代碼不可見。你對'getSubmittedValue()'是正確的,它確實總是'null',因爲在更新模型值階段之後觸發'AjaxBehaviorEvent'。我必須直接從我的模型中檢索選定的ID。至於我的'selectItems',那不是問題,因爲我的'getBranche()'方法有這樣的簽名:'public List getBranche(){' – Wis 2014-09-23 08:15:12

+0

問題的第二部分是我的'p:dialog'是不以任何形式在頁面中。出於某些原因,我必須將我的'p:confirmDialog'放在任何形式之外。我認爲我應該對'對話框做同樣的事情,這確實是一個壞主意。在表單之外,沒有值被提交給服務器。從我提供的代碼中看不到這部分。 – Wis 2014-09-23 08:18:01

相關問題