避免 rich:dataTable 中某列的 onRowClick 事件

Avoid onRowClick event in certain column of rich:dataTable

我有一个 rich:dataTable,其中包含 4 列。

第一个是 selectBooleanCheckBox,它将一个名为 "CheckEvent" 的事件(仅作为示例)触发到 bean 中。

同时,dataTable 还支持 onRowClick 事件,该事件会在 bean 上触发 "onRowClick"。

我面临的问题是,当我单击第一列(检查列)时,onRowClick 也会触发。在这种情况下,这肯定是个问题:如果某行选中了支票,而我只想取消选中它,onRowClick 会突出显示该行,这是我不想要的行为。

我试图在其他三个 rich:columns 中定义 oOnRowClick 事件,但我用这种方法实现的是什么;该事件甚至没有触发,因此数据表没有 onRowClick

尝试通过 bean 制作逻辑也不起作用,因为我不知道在输入 onRowClick() 方法时推入了哪一列。

我真的很绝望。如有任何帮助,我们将不胜感激。

onrowclick 在 table 行上添加 onclick,如果您不希望它触发,则必须防止复选框上的点击事件冒泡到该行,例如:

<h:selectBooleanCheckbox onclick="event.stopPropagation()" … />

我可以看到这个 <h:selectBooleanCheckbox onclick="event.stopPropagation()" … /> 使用 selectBooleanCheckbox.

完美解决 QA 的问题

如果不应对 onclick 事件作出反应的列包含一个可单击的图标,它应该执行不同的功能,类似的方法是否有效?请参阅以下示例:

<rich:panel headerClass="panelHeader" styleClass="panel">
    <f:facet name="header">Header</f:facet>
    <rich:dataTable id="myTable" value="#{myModel}" var="k">

        <a4j:support event="onRowClick" action="#{myAction.selectItem(k, facesContext.viewRoot.viewId)}"
                            reRender="myTable"/>

            <rich:column>
                <f:facet name="header">
                        <h:outputText value="Normal Column - should be clickable"/>
                </f:facet>
                <h:outputText value="#{k.name}"/>
            </rich:column>

            <rich:column >
                <f:facet name="header">
                    <h:outputText value="Only Click on Icon should react to Mouseclick"/>
                </f:facet>
                <s:graphicImage value="/img/bin_closed.gif">
                    <a4j:support event="onclick"
                                 action="#{myAction.deleteItem(k)}"
                                 reRender="myTable"
                                 ajaxSingle="true" limitToList="true"
                                 onsubmit="if(!confirm('Really?')) { return false; }" />/>
                </s:graphicImage>
            </rich:column>

    </rich:dataTable>

</rich:panel>