在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>
随后将另一个称为上面的那个。为简洁起见,我还没有发布其他弹出窗口。
答案 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
方法,这正是您所期望的。