繁体   English   中英

Primefaces selectOneMenu在更改时不执行

[英]Primefaces selectOneMenu does not execute on change

我正在写一个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;
}

但是,如果我在上述方法的开头设置断点,则不会达到断点。

我错过了什么?

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

如果您想要在任何其他事件(例如更改)上执行某些操作,则需要启用ajax

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

当在backing bean中更改值时,将调用someMethod()

我建议你只使用setSelectedPowerBallDrawingDate(String selectedPowerBallDrawingDate)作为设置值的setter,而不是根本不包含任何业务逻辑。 然后让您从<p:ajax/>调用的方法执行业务逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM