2013-03-23 77 views
3

我正在編寫PrimeFaces應用程序。我在我的XHTML下面的代碼:Primefaces selectOneMenu不會在更改時執行

<p:selectOneMenu value="#{lottoCheckerBean.selectedPowerBallDrawingDate}"> 
    <f:selectItems value="#{lottoCheckerBean.powerBallDrawingDates}" /> 
</p:selectOneMenu> 

我期待下面的代碼中要執行我的LottoCheckerBean當值選擇:

public void setSelectedPowerBallDrawingDate(String selectedPowerBallDrawingDate) { 
    //get drawing 
    PowerBallDrawing currentDrawing = null; 
    for (int d = 0; d < powerBallDrawings.size(); d++) { 
     if (powerBallDrawings.get(d).getDrawingDate().equals(selectedPowerBallDrawingDate)) { 
      currentDrawing = powerBallDrawings.get(d); 
      break; 
     } 
    } 
    if (currentDrawing == null) { 
     try { 
      //create new drawing; 
      currentDrawing = new PowerBallDrawing(selectedPowerBallDrawingDate); 
      powerBallDrawings.add(currentDrawing); 
      Arrays.sort(powerBallDrawings.toArray()); 
     } catch (Exception ex) { 
      //will not happen so ignore 
     } 
    } 
    this.selectedPowerBallDrawingDate = selectedPowerBallDrawingDate; 
} 

但是,如果我在設置斷點上述方法的開始,沒有達到斷點。

我錯過了什麼?

回答

4

你期望在變化執行的代碼將被調用時,你提交中,你selectOneMenu放置形式。這就是當selectOneMenu的值將傳遞給你的bean的時候。

如果你想執行在任何其他情況下的東西,如變化,您需要啓用AJAX

<p:selectOneMenu value="#{lottoCheckerBean.selectedPowerBallDrawingDate}" > 
    <f:selectItems value="#{lottoCheckerBean.powerBallDrawingDates}" /> 
    <p:ajax event="change" listener="#{lottoCheckerBean.someMethod}" /> 
</p:selectOneMenu> 

當值的支持bean改變時,someMethod()將被稱爲。

我建議你只使用setSelectedPowerBallDrawingDate(String selectedPowerBallDrawingDate)作爲設置值,而不是任何業務邏輯。然後讓您從<p:ajax/>調用的方法執行業務邏輯。

+1

我唯一的補充是,OP可以通過向他的''標籤添加'onchange =「submit()」'屬性來同步顯式地提交表單。 +1 – skuntsel 2013-03-23 17:51:10

+0

是的。但也許他寧願只提交表格的一小部分(即selectOneMenu),即ajax方式。會導致傳遞的數據更少。我寧願使用'p:ajax'標籤。 – Magnilex 2013-03-23 17:55:30

相關問題