7

在我的应用程序中,我有一个<p:datatable>withrowExpansion列。我需要一次打开一行。如果有人试图扩展第二行,剩余的第一行已扩展,则会生成一条消息说First close the expanded row and then open another row.

这如何实施?任何指针都会对我很有帮助。谢谢

4

4 回答 4

9

截至 2015 年,这个问题是谷歌搜索结果中的第一个问题,我想补充一点,对于 PrimeFaces 5.1,有 dataTable 属性rowExpandMode,当设置为single- 时,只允许显示一行。例子:

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

这不完全是问的,但我希望它会对其他人有所帮助。

于 2015-04-19T12:57:48.517 回答
5

您可以使用(我已经在 mojarra 2.1.20 和 Primefaces 3.5 中对其进行了测试,并且工作正常)以下解决方案,该解决方案在扩展行时调用 JavaScript 函数。当点击第二行,并且有另一个展开的行时,它会触发一个click事件,这反过来又会折叠之前打开的行。

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>
于 2013-04-12T16:01:32.657 回答
1

在此处查看datatable.jsPrimefaces 中的文件。有一个名为.toggleExpansion

也许您可以覆盖此函数并在没有展开行时调用原始函数,并在另一行已展开时显示消息(而不是调用原始行)。

只是一个想法...

于 2013-04-12T15:03:21.723 回答
0

您可以借助此自定义方法来实现此目的。

给'togglerClass'这个类

 <pou:column styleClass="togglerClass" style="width:16px">
                                            <pou:rowToggler/>
                                        </pou:column>

JavaScript 代码在这里;

function prodsToggler() {
    $('.togglerClass div').click(function () {
        var currentTr = $(this).closest("tr");
        var $trs = $('.togglerClass').closest("tr").not(currentTr);
        $trs.each(function (index, el) {
            var $this = $(el),
                    $next = $this.next(".ui-expanded-row-content");

            $this.removeClass("ui-expanded-row");
            $next.remove();

            $this.find(".ui-row-toggler").removeClass("ui-icon-circle-triangle-s");
        });
    });
}

在windows中调用这个方法准备好了。

于 2016-08-10T09:05:06.320 回答