2

AccessCardエンティティを表示する3つの列を持つ単純なデータテーブルがあります。1つの列には、「INACTIVE」、「DELETED」などの「ステータス」があります。明らかに、これらの値はバッキングBeanから派生しています。

つまり#{card.accessCard.flgDeleted} == true、「INACTIVE」と表示されます

コンテキストメニューには、「削除済みとしてフラグを立てる」オプションがありますflgDeleted == false。の場合、削除オプションをレンダリングしたくありませんflgDeleted == false

今まで実装したコードでは、左クリックで行を選択するとすべて正常に動作します。右クリックを使用して行を選択し、同時にコンテキスト メニューを表示すると、バッキング Bean が更新されていないように見えます。興味深いことに、行を右クリックして実際に選択すると、「削除済みとしてフラグを立てる」と言うと、すべてうまくいきます。

<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>  
4

2 に答える 2

0

同様の問題があり、dataTableの直後にcontextMenuをpanelGridに移動することで解決しました。その後、javascriptハックは必要ありませんでした。

于 2018-06-28T14:06:08.387 に答える