4

私は PrimeFaces アプリケーションを作成しています。XHTML に次のコードがあります。

<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

1 に答える 1

6

変更時に実行する予定のコードは、自分が配置されているフォームを送信するときに呼び出されます。selectOneMenuそのとき、からの値がselectOneMenuBeanに渡されます。

変更などの他のイベントで何かを実行したい場合は、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/>にビジネスロジックを実行させます。

于 2013-03-23T17:39:29.893 に答える