java - Primefaces DataTable - rowSelectListener 隐藏行内的 CommandButton

标签 java datatable primefaces

我有一个 PrimeFaces 数据表,其中每一行都有一个保存删除和另一个命令按钮。 dataTable 有 selectionMode="single" 和一个 rowSelectListener。当我单击命令按钮时,rowSelectListener 被触发,但 commandButton 的操作没有被触发。

该怎么办?我需要两者都开火!

我无法使用immediate="true",因为在数据表之外有一些表单字段必须提交。它与命令按钮中添加的 immediate="true" 配合使用。

Primafaces 版本:2.2.1 JSF版本:2.0.3

提前感谢您提供任何线索!

代码:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:f="http://java.sun.com/jsf/core"
            xmlns:v="http://java.sun.com/jsf/composite/composite"
            xmlns:p="http://primefaces.prime.com.tr/ui">
    <h:form id="contractReasonAddFormId">
            <span class="error">
                <h:messages /> 
            </span>
    <h:panelGrid columns="2" cellspacing="5" >
        <h:outputLabel class="label" value="#{resourceBundle.coAddReason_coStatus_label_Key}" />
        <h:outputText class="output" value="#{selectedContractService != null ? selectedContractService.COS_STATUS_DESC : contract.CO_STATUS_DESC}" />
        <h:outputLabel class="label" for="reasonId" value="#{resourceBundle.contractChangeStatus_NewReason_Key}:" />
        <h:selectOneMenu id="reasonId" value="#{bbNewStatusReason.selectedString}" required="true" requiredMessage="#{resourceBundle.contractChangeStatus_NewReason_Key} #{resourceBundle.valueIsRequired}">
            <f:selectItem itemValue="" itemLabel="- #{resourceBundle.contractChangeStatus_SelectReason_Key} -" />
            <f:selectItems value="#{bbNewStatusReason.list}" var="r" itemValue="#{r.REASON}" itemLabel="#{r.RS_DES}" />
        </h:selectOneMenu>
    </h:panelGrid>
    <!-- some other form fields --->
    <h:panelGrid>
        <p:dataTable 
        id="currentStatusReasonTable" 
        value="${bbCurrentStatusReason.list}" 
        var="currStReason"
        selectionMode="single"
        selection="#{bbCurrentStatusReason.selectedItem}"
        rowSelectListener="#{contractAddReasonAction.selectReason}" onRowSelectUpdate="reasonValidityTimes"         
        >
            <p:column sortBy="#{currStReason.RS_DES}" headerText="#{resourceBundle.coAddReason_currStReason_label_Key}">
                <h:outputText value="#{currStReason.RS_DES}: "/>
            </p:column>
            <!-- Other columns -->
            <p:column headerText="#{resourceBundle.coAddReason_action_facet_Key}">
                <p:commandButton id="updateReasonId" action="dlgUpdate" image="ui-icon ui-icon-pencil" title='#{resourceBundle["button.save"]}' disabled="#{selectedContractService != null ? currStReason.LEVEL == 'C' : false}" >
                    <f:setPropertyActionListener target="#{bbCurrentStatusReason.selectedItem}" value="#{currStReason}" />
                </p:commandButton>
                <p:commandButton id="deleteReasonId" action="dlgDelete" image="ui-icon ui-icon-circle-minus" title='#{resourceBundle["button.delete"]}' disabled="#{selectedContractService != null ? currStReason.LEVEL == 'C' : false}" >
                    <f:setPropertyActionListener target="#{bbCurrentStatusReason.selectedItem}" value="#{currStReason}" />
                </p:commandButton>
                <p:commandButton id="generateDeleteDocumentsId" action="generateDeleteDocuments" image="ui-icon" title='#{resourceBundle["button.generateDocumentsForDel"]}' immediate="true" rendered="#{showPrintDocument != null}" >
                    <f:setPropertyActionListener target="#{bbCurrentStatusReason.selectedItem}" value="#{currStReason}" />
                </p:commandButton>
            </p:column>

        </p:dataTable>

    </h:panelGrid>
    </h:form> 
</ui:composition>

最佳答案

我也遇到了同样的问题。我最终在 commandButton 上使用的是 onclick 属性中的 event.stopPropagation() 。这是我的删除按钮。

<p:commandButton icon="ui-icon-trash"
                             onclick="connDelConfirm.show(); event.stopPropagation();" 
                             actionListener="#{connectionController.setSelectedConnection(connection)}"
                             disabled="#{connection.deleted}"/>

onclick 属性上的另一个操作会打开删除操作的确认对话框。由于该事件的传播已停止。我需要一种方法来仍然设置要删除的所选项目。这是通过 Action 监听器完成的。我只是在 bean 中调用 setSelectedItem 方法,并将 dataTable 中的“var”属性传递给它。

关于java - Primefaces DataTable - rowSelectListener 隐藏行内的 CommandButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12933006/

相关文章:

java - Spring 配置@RefreshScope

java - 如何将 Float(包装类)转换为 Integer 包装类?

php - Laravel 数据表 : How to sort column with the second data

css - 如何将 bootstrap css 应用于 Primefaces 自定义组件

java - 使用 PrimePush 时出现 NullPointerException

java - :selectOneMenu send me previus value

java - SVNKit : list of updated/added files in a working copy after update operation

java - 从 Travis 中排除测试

javascript - 将 sTyle 设置为动态 jquery 数据表中的所有列

java - Primefaces 链接打开电子邮件撰写窗口