Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How at a time one row can expand in <p:dataTable>?

In my application I have a <p:datatable> with rowExpansion column. I have a requirement to open a single row at a time. If anyone tries to expand second row, remaining first row expanded then one message will be generated saying First close the expanded row and then open another row.

How this can be implemented ? Any pointer will be very helpful to me. Thanks

like image 679
Diganta Avatar asked Apr 12 '13 13:04

Diganta


3 Answers

As of 2015, and this question is first in Google search results, I want to add that for PrimeFaces 5.1, there is dataTable attribute rowExpandMode, when set to single - allows only one row to be shown. Example:

<p:dataTable var="line" value="#{bean.lines}" rowExpandMode="single">

It's not exactly what was asked, but I hope that it'll help to others.

like image 196
Anton Avatar answered Nov 17 '22 17:11

Anton


You can use (I have tested it in mojarra 2.1.20 and Primefaces 3.5 and it works fine) the following solution which calls a JavaScript function when the row is expanded. When clicking on a second row, and there is another expanded row, it will trigger a click event, which will in turn collapse the previously opened row.

xhtml:

<p:ajax event="rowToggle" onstart="test();"/>  

Javascript:

<script type="text/javascript">
    function test(){
        var i = $('.ui-row-toggler.ui-icon-circle-triangle-s').length;
        if(i == 1){return;}
            $('.ui-row-toggler.ui-icon-circle-triangle-s').trigger('click');
    }
</script>
like image 5
Rong Nguyen Avatar answered Nov 17 '22 17:11

Rong Nguyen


Check out the datatable.js file in Primefaces here. There is a javascript function called toggleExpansion.

Maybe you can override this function and call the original one when no row is expanded and show a message when another row is already expanded (and not call the original one).

Just an idea...

like image 1
Jens Avatar answered Nov 17 '22 15:11

Jens