rowToggle应该调用第一个rowSelect事件jsf primefaces

时间:2016-12-14 21:18:10

标签: primefaces jsf-2

<p:dataTable var="item" id="datatable-list" value="#{generalJournalEntryMB.generalJournalEntries}" rows="10"
                paginator="true" reflow="true" paginatorPosition="top" rowExpandMode="single"
                rendered="#{generalJournalEntryMB.generalJournalEntries.size() > 0}" rowIndexVar="rowIndex"
                paginatorTemplate="{CurrentPageReport}  {PreviousPageLink} {NextPageLink} " rowKey="#{item.id}"
                selectionMode="single" selection="#{generalJournalEntryMB.generalJournalEntry}" widgetVar="datatable-list">

                <p:column style="width:16px">
                        <p:rowToggler  />
                </p:column>

                <p:column headerText="Id">
                    <h:outputText value="#{item.id}" />
                </p:column>

                <p:column headerText="Description">
                    <h:outputText value="#{item.description}" />
                </p:column>

                <p:column headerText="Amount">
                    <h:outputText value="#{item.amount}" />
                </p:column>


                <p:column headerText="Reference">
                    <h:outputText value="#{item.reference}" />
                </p:column>

                <p:column headerText="State">
                    <h:outputText value="#{item.postingState.value}" />
                </p:column>

                <p:rowExpansion id="expand" rendered="true">

                    <p:panelGrid columns="2" columnClasses="label,value" style="width:300px">

                        <h:outputText value="Id:" />
                        <h:outputText value="1" />

                        <h:outputText value="Year" />
                        <h:outputText value="1983" />

                        <h:outputText value="Color:" />
                        <h:outputText value="White" />

                        <h:outputText value="Price" />
                        <h:outputText value="#{generalJournalEntryMB.price}" />
                    </p:panelGrid>

                </p:rowExpansion>

                <p:ajax event="rowSelect" listener="#{generalJournalEntryMB.rowSelectListener}" update="main:top-menu-bar" />
                <p:ajax event="rowToggle"  listener="#{generalJournalEntryMB.rowToggleListener}" update="main:top-menu-bar" />

            </p:dataTable>

当我在不选择行的情况下展开行时,它什么也没显示。目前我在做的是首先选择行并展开它以获得欲望结果。

当rowToggle事件触发时,我们如何自动触发rowSelect even / ajax调用?

1 个答案:

答案 0 :(得分:3)

您可以覆盖primefaces toggleExpansion函数,使其在

之前执行selectRow
PrimeFaces.widget.DataTable.prototype.toggleExpansion = (function() {
 var cached_function = PrimeFaces.widget.DataTable.prototype.toggleExpansion;
 return function() {
     var row = arguments[0].closest('tr');
     if(this.cfg.selectionMode === 'single') {
         this.unselectAllRows();
     }
     if(this.cfg.selectionMode){
         this.selectRow(row, false);
     }    
     var result = cached_function.apply(this, arguments);
     return result;
 };
})();