【问题标题】:Primefaces selectOneMenu does not execute on changePrimefaces selectOneMenu 不会在更改时执行
【发布时间】:2013-03-23 16:42:58
【问题描述】:

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

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

我错过了什么?

【问题讨论】:

    标签: java jsf-2 primefaces


    【解决方案1】:

    当您提交您的selectOneMenu 所在的表单时,将调用您希望在更改 时执行的代码。这就是来自selectOneMenu 的值将传递给您的bean 的时候。

    如果您想对任何其他事件执行某些操作,例如 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) 用作设置值的设置器,根本不包含任何业务逻辑。然后让你从&lt;p:ajax/&gt;调用的方法来做业务逻辑。

    【讨论】:

    • 我唯一的补充是OP可以通过将onchange="submit()"属性添加到他的&lt;p:selectOneMenu&gt;标签来显式地同步提交表单。 +1
    • 是的。但也许他宁愿只提交表单的一小部分(即 selectOneMenu),即 ajax 方式。将导致通过的数据更少。我更喜欢使用p:ajax 标签。
    猜你喜欢
    • 1970-01-01
    • 2012-12-21
    • 2012-01-05
    • 2015-09-25
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2013-08-14
    • 2015-09-03
    相关资源
    最近更新 更多