Jsf 2 确定何时已选择表中的选定行

Jsf 2 确定何时已选择表中的选定行,jsf-2,primefaces,primefaces-extensions,Jsf 2,Primefaces,Primefaces Extensions,我在primefaces中有一个p:datatable,我有不同的监听器,用于选择datatable中的行事件 <script type="text/javascript"> var prevRow ; function checkDupRowClick(){ var currRow = $('tr.ui-widget-content.ui-datatable-selectable[aria-selected="true"]'); if

我在primefaces中有一个
p:datatable
,我有不同的监听器,用于选择datatable中的行事件

<script type="text/javascript">
    var prevRow ;
    function checkDupRowClick(){
        var currRow = $('tr.ui-widget-content.ui-datatable-selectable[aria-selected="true"]');
        if($(currRow).is($(prevRow))){
            //selected or clicked same row so return FALSE to prevent p:ajax from executing
            return false;
        }else{
            //selected or clicked different row so return TRUE to allow p:ajax to execute
            prevRow = currRow;
            return true;
        } 
    }
</script>
我需要确定何时已选中表中的选定行,如何才能做到这一点

<script type="text/javascript">
    var prevRow ;
    function checkDupRowClick(){
        var currRow = $('tr.ui-widget-content.ui-datatable-selectable[aria-selected="true"]');
        if($(currRow).is($(prevRow))){
            //selected or clicked same row so return FALSE to prevent p:ajax from executing
            return false;
        }else{
            //selected or clicked different row so return TRUE to allow p:ajax to execute
            prevRow = currRow;
            return true;
        } 
    }
</script>
我需要这个,因为我不知道当我在表中选择已经选择的行时,
p:blockUI
会运行

<script type="text/javascript">
    var prevRow ;
    function checkDupRowClick(){
        var currRow = $('tr.ui-widget-content.ui-datatable-selectable[aria-selected="true"]');
        if($(currRow).is($(prevRow))){
            //selected or clicked same row so return FALSE to prevent p:ajax from executing
            return false;
        }else{
            //selected or clicked different row so return TRUE to allow p:ajax to execute
            prevRow = currRow;
            return true;
        } 
    }
</script>
这是我的页面代码:

...
<pe:blockUI autoShow="true" 
            source="itemsDT" 
            event="rowSelect" 
            target=":processTab">
    <au:loading />                                    
</pe:blockUI>
<p:dataTable widgetVar="processesTable" 
             id="itemsDT" 
             var="item" 
             value="    
             {tasksbacking2.availableProcesses}" 
             selection="#{tasksbacking2.selectedProcess}" 
             rowKey="#{item.id}"
             tableStyleClass="table
             table-condensed table-bordered"   
             resizableColumns="true">

    <p:ajax event="rowSelect" 
            listener="#{tasksbacking2.onClickFillDetails}" 
            update="@this,:processTab,:menuForm:menuBar" />
    ...
</p:dataTable>
...
<script type="text/javascript">
    var prevRow ;
    function checkDupRowClick(){
        var currRow = $('tr.ui-widget-content.ui-datatable-selectable[aria-selected="true"]');
        if($(currRow).is($(prevRow))){
            //selected or clicked same row so return FALSE to prevent p:ajax from executing
            return false;
        }else{
            //selected or clicked different row so return TRUE to allow p:ajax to execute
            prevRow = currRow;
            return true;
        } 
    }
</script>

我认为您需要js中的一些函数,并在onstart中应用这些函数

<script type="text/javascript">
    var prevRow ;
    function checkDupRowClick(){
        var currRow = $('tr.ui-widget-content.ui-datatable-selectable[aria-selected="true"]');
        if($(currRow).is($(prevRow))){
            //selected or clicked same row so return FALSE to prevent p:ajax from executing
            return false;
        }else{
            //selected or clicked different row so return TRUE to allow p:ajax to execute
            prevRow = currRow;
            return true;
        } 
    }
</script>
那样

<p:ajax event="rowSelect" onstart="???" />
<script type="text/javascript">
    var prevRow ;
    function checkDupRowClick(){
        var currRow = $('tr.ui-widget-content.ui-datatable-selectable[aria-selected="true"]');
        if($(currRow).is($(prevRow))){
            //selected or clicked same row so return FALSE to prevent p:ajax from executing
            return false;
        }else{
            //selected or clicked different row so return TRUE to allow p:ajax to execute
            prevRow = currRow;
            return true;
        } 
    }
</script>

这是检查同一行上重复单击的脚本。
将此脚本放在
p:dataTable
代码下面

<script type="text/javascript">
    var prevRow ;
    function checkDupRowClick(){
        var currRow = $('tr.ui-widget-content.ui-datatable-selectable[aria-selected="true"]');
        if($(currRow).is($(prevRow))){
            //selected or clicked same row so return FALSE to prevent p:ajax from executing
            return false;
        }else{
            //selected or clicked different row so return TRUE to allow p:ajax to execute
            prevRow = currRow;
            return true;
        } 
    }
</script>

如果您需要更多解释,请发表评论。

您是否使用primefaces 5.1?或者你能说出你的primefaces库版本吗?因为我看不到您在`p:blockUI上使用的某些属性,或者您正在使用其他组件?我使用primefaces 5.0并使用primefaces扩展(对于带有事件捕获的blockUI)。看这个哦,好的。您可以使用
RequestContext
解决此问题,并在新选择的项目与上次选择的项目不同时运行
pe:blockUI
。是否可以将may edition替换为
p:blockUI
,这是我的错误。更改上下文不是解决方案。是的,我又编辑了一遍。我的解决方案可能是在p:ajax中的onstart事件中,如下所示:这个脚本可以工作。但是当返回false时,页面就不工作了。为什么?我的p:ajax是:有JS控制台错误吗?您的页面上有多少个表?2个表,但我知道这一点,并将脚本更改为:var prevRow;函数checkDupRowClick(){var currRow=$('#formDTItems tr.ui-widget-content.ui datatable可选[aria selected=“true”]);if($(currRow).is($(prevRow)){return false;}else{prevRow=currRow;返回true;}}
<script type="text/javascript">
    var prevRow ;
    function checkDupRowClick(){
        var currRow = $('tr.ui-widget-content.ui-datatable-selectable[aria-selected="true"]');
        if($(currRow).is($(prevRow))){
            //selected or clicked same row so return FALSE to prevent p:ajax from executing
            return false;
        }else{
            //selected or clicked different row so return TRUE to allow p:ajax to execute
            prevRow = currRow;
            return true;
        } 
    }
</script>