PrimeFaces Datatable Щелкните правой кнопкой мыши «Выбрать» + контекстное меню для конкретной строки

У меня есть простая таблица данных с 3 столбцами, в которой отображаются объекты AccessCard. В одном столбце у меня есть «Статус», который может быть скажем «НЕАКТИВНЫЙ», «УДАЛЕННЫЙ» и т. Д. Очевидно, что эти значения получены из вспомогательного компонента.

Итак, если скажем #{card.accessCard.flgDeleted} == true, то отображается «НЕАКТИВНО».

В контекстном меню у меня есть опция «Пометить как удаленную», которая устанавливает flgDeleted == false. Я не хочу, чтобы опция удаления отображалась, если flgDeleted == false.

С кодом, который я реализовал до сих пор, когда я выбираю строку с помощью ЛЕВОГО щелчка, все работает нормально. Когда я использую ПРАВЫЙ щелчок, чтобы выбрать строку и показать контекстное меню, в то же время кажется, что вспомогательный компонент не обновляется. Интересно, что если щелкнуть правой кнопкой мыши строку и фактически выбрать, скажем, «Пометить как удаленную», все будет в порядке.

<p:contextMenu id="contextMenu" for="cardTable">

            <p:menuitem value="View Card History" icon="ui-icon-search"/>


            <p:menuitem value="Flag as Deleted" icon="ui-icon-trash"
                process="@form" update="@form" oncomplete="dlgDeleteCard.show()"
                rendered="#{!card.accessCard.flgDeleted}" />
</p:contextMenu>



<h:panelGrid style="width:500px;">

            <p:dataTable var="pc" id="cardTable" widgetVar="cardTable"
                value="#{card.accessCardList}" 
                 selectionMode="single" selection="#{card.accessCard}" 
                 rowKey="#{pc.cardId}">

                <p:ajax event="rowSelect" listener="#{card.onRowSelect}"
                    update="@form :messages" />

                <p:column id="cardId" width="20%" headerText="Card Id">
                    <h:outputText value="#{pc.cardId}" />
                </p:column>

                <p:column id="cardHolderName" width="50%"
                    headerText="Current Holder">
                    <h:outputText value="#{pc.currentHolder}" />
                </p:column>

                <p:column id="cardStatus" width="10%" headerText="Status">
                     #{card.getCardStatus(pc)}
                </p:column>


            </p:dataTable>
</h:panelGrid>  

person ChrisGeo    schedule 11.08.2013    source источник


Ответы (2)


Если кому-то это все еще нужно, используйте:

<p:ajax event="contextMenu" update=":MyComponent"/>
person user2771738    schedule 14.10.2013
comment
Какой компонент является MyComponent? - person jimmybondy; 17.01.2014
comment
в случае 1-го поста я полагаю ‹p:ajax event=contextMenu update=:cardTable/› - person user2771738; 19.01.2014
comment
Я предполагаю, что речь идет о PrimeFace 3.5 (с учетом дат выпуска и даты вопроса). Более новые версии должны быть в порядке. - person dsuess; 02.02.2018

У меня была аналогичная проблема, и я решил ее, переместив contextMenu в PanelGrid сразу после dataTable, тогда мне не понадобился взлом javascript.

person Marko Novakovic    schedule 28.06.2018