f:随机调用setPropertyActionListener

时间:2014-12-22 07:39:54

标签: jsf primefaces

我面临着<f:setPropertyActionListener>标签的奇怪行为。有时甚至更奇怪的是,随机它会停止工作,因此在行动开始之前不会调用setter方法(我已经快速翻译了意大利语中的消息,只是为了告诉你要做什么)。 这是:

<p:treeTable value="#{addestramentoController.addestramenti}"
             id="addestramentiTree"
             var="addr" scrollable="true"
             scrollHeight="200"
             emptyMessage="No training in database.">

    <f:facet name="header">
        Training List
    </f:facet>

    <p:column .... />

    <p:column style="width:20px; text-align: center">
        <p:commandLink rendered="#{(addr.dataAddestramento ne null)}"
                       oncomplete="PF('confirmDlg').show()"
                       title="Delete training"
                       styleClass="ui-icon ui-icon-closethick">

            <f:setPropertyActionListener value="#{addr}"
                                        target="{addestramentoController.item}"/>
        </p:commandLink>
    </p:column>
</p:treeTable>

这是对话框,在同一页面和同一表格内:

<!-- Confirm Dialog -->
<p:confirmDialog id="confirm"
                 widgetVar="confirmDlg"
                 message="Delete training?"
                 header="Confirm"
                 severity="alert"
                 closeOnEscape="true">

    <p:commandButton value="Yes"
                     action="#{addestramentoController.doDelete}"
                     update="addestramentiTree nuovoAddestramento"
                     oncomplete="PF('confirmDlg').hide();"
                     icon="ui-icon-check"/>

    <p:commandButton value="No" type="button"
                     onclick="PF('confirmDlg').hide();"
                     icon="ui-icon-close"/>
</p:confirmDialog>
<!-- ////////////// -->

使用Java EE 7 CDI批注完成AddestramentoController辅助bean。以下是相关部分:

public void setItem(VolAddestramento item) {
    // Really this should NEVER happen!
    if (item == null) {
        setDialogMessage(new DialogMessage("Error", "Error Message"));
    }
    this.item = item;
}

public void doDelete() {
    // Delete selected training
    aServ.deleteAddestramento(item);

    // Update table data
    fillAddestramenti();
}
EJB中的

aServ,一切正常,但有时不行。根本没有调用setItem导致EJB服务方法中的NPE。正如您在<p:dialog>中看到的那样,我使用了action,但我也尝试过actionListener。我不知道我的代码中有什么问题,但它与PrimeFaces展示中使用的相同,应该开箱即用。我在开发测试期间从未遇到过这个问题,只是(显然)在部署环境中发生。

这些是我的开发和部署设置:

开发:JDK 8u25_x64 - NB 8.0.2 - 使用Mojarra 2.2.7 impl的PrimeFaces 5.1社区的GF 4.1。

部署:JDK 8u25_x64 - Wildfly 8.0.0Final with Mojarra 2.2.5-jbossorg-3

也许是Mojarra的问题?

感谢您的时间。

编辑:好吧,忘了告诉......支持bean是ViewScoped

0 个答案:

没有答案