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

当您提交放置您的表单时,将调用您希望在更改时执行的代码。那是来自 的值将传递给您的 bean 的时间。selectOneMenuselectOneMenu

如果您想对任何其他事件执行某些操作,例如change,您需要启用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 回答