避免在RichFaces数据表中单击outputLink时发生onRowClick事件

Avoid onRowClick event when outputLink is clicked inside of RichFaces datatable

本文关键字:onRowClick 事件 outputLink 单击 RichFaces 数据表      更新时间:2023-09-26

如何避免在具有outputlink(目标到新窗口)的列上的数据表上调用onRowClick ?

<rich:dataTable id="dt" value="#{bean.cars} var="_car">
    <a:support event="onRowClick" action="#{action.navigateToCarDetails(_car.id)}"/>
    <rich:column>
        <f:facet name="header">Select</f:facet>
        <a:commandLink onclick="Event.stop(event)" action="#{bean.toggleSelectedCar(_car.id)}" reRender="dt" ajaxSingle="true" limitToList="true">                
            <h:graphicImage value="/img/icon_checkbox_#{bean.isCarSelected(_car.id) ? 'active' : 'inactive'}.gif"/>
        </a:commandLink>
    </rich:column>
    <rich:column>
        <f:facet name="header">Brand</f:facet>
        <h:outputLink value="#{_car.link}" target="_blank">
            <h:outputText value="#{_car.brand}"/>
        </h:outputLink>
    </rich:column>
    <rich:column>
        <f:facet name="header">Year</f:facet>
        <h:outputText value="#{_car.year}"/>
    </rich:column>
    <rich:column>
        <f:facet name="header">Color</f:facet>
        <h:outputText value="#{_car.color}"/>
    </rich:column>
</rich:dataTable>

在上面的示例中,当我单击行时,它将导航到包含汽车详细信息的页面。

当单击Select列的行时,它将更新所选的汽车,并相应地更新复选框图标,但不导航到汽车详细信息页面,因为我有onclick="Event.stop(event)"

但是,当我单击outputLink框时,除了打开一个新窗口并显示制造商web页面外,它还将原始页面更新为汽车详细信息。我如何防止这种情况发生?(我尝试添加onclick事件停止,就像选择列,但除了停止onrowclick事件,它还阻止链接到制造商的网页)

Event.stop(event)的基本功能如下:

'' stops the event from bubbling up the event chain
event.stopPropagation();
'' prevents the default action the browser makes on that event
event.preventDefault();

在你的情况下,你只是想防止冒泡,所以一个方法是:

onclick="event.stopPropagation()"

您应该能够这样做:

<rich:dataTable
    onRowClick="if (event.target.id.endsWith('columnId')) return false;" …>

onRowClick函数在a4j:support之前执行,因此如果您返回false,则不会调用该操作。