使用oncomplete时不调用commandButton中的操作

时间:2014-09-30 09:25:51

标签: jsf richfaces

在stackoverflow上也有类似的问题,但不幸的是,我找不到我一直在寻找的答案。

我是JSF的新手。删除已授权的项目时,我需要显示两个popupPanel,如果没有,则需要显示一个。

当我使用onclick调用popupPanel时出现问题,第一个popupPanel中的动作被调用,但第二个popupPanel没有呈现(?)。我修改了onclick到oncomplete。但是,这会导致另一个问题:正常删除已授权的项目,但未授权的项目会导致问题(根本不会调用该操作)。我正在粘贴下面的代码。

我有一个dataTable,其中一列用于删除:

<rich:column innerId="c7">
    <a4j:commandLink execute="@this"
        onclick="#{rich:component('confirmDeleteModalPanel')}.show();"
        render="confirmDeleteModalPanel" >
        <f:setPropertyActionListener target="#{bean.selectedItem}" value="#{item}" />
            <h:graphicImage url="/img/delete.png"/>
    </a4j:commandLink>
</rich:column>

这会调用此popupPanel:

<rich:popupPanel modal="true" id="confirmDeleteModalPanel">
    <h:form>
        <h:panelGrid>
            <h:panelGroup rendered="#{item.isAuthorised()}">
                <a4j:commandButton value="#{messages['button.yes']}"
                          onclick="#{rich:component('confirmDeleteModalPanel')}.hide(); #{rich:component('doubleConfirmDeleteModalPanel')}.show(); "
                          render="doubleConfirmDeleteModalPanel" />
            </h:panelGroup>
            <h:panelGroup rendered="#{!item.isAuthorised()}">
                 <a4j:commandButton value="#{messages['button.yes']}"
                                   action="#{item.delete()}"
                                onclick="#{rich:component('confirmDeleteModalPanel')}.hide()" />
            </h:panelGroup>
        </h:panelGrid>
    </h:form>
</rich:popupPanel>

随后将另一个称为上面的那个。为简洁起见,我还没有发布其他弹出窗口。

1 个答案:

答案 0 :(得分:0)

我不确定这是否是错误(不再对JSF如此坚定),但您可能想尝试使用action="#{item.delete}"而不是action="#{item.delete()}"。可能的情况是,被调用的操作是item.delete()调用的结果,而不是item.delete函数。

实施例: 假设item.delete()返回&#34; aResult&#34;。

使用action="#{item.delete()}",当用户点击该按钮时,操作&#34; aResult&#34;被称为,可能不存在。

使用action="#{item.delete}",当用户点击该按钮时,操作&#34; #{item.delete}&#34;被调用,即名为delete的bean上的item方法,这正是您所期望的。