私は Primefaces 3.3.1 を使用していますが、質問があります。
p:dataTable の p:column 内に p:commandButton があります。以下に示すxhtmlでボタンをクリックするとオーバーレイメニューを表示できます。
<p:commandButton id="btnID" icon="ui-icon-circle-triangle-s" style="height: 16px;">
<f:setPropertyActionListener value="#{searchItem}" target="#{bean.selectedSearchItem}" />
</p:commandButton>
<p:slideMenu overlay="true" trigger="btnID" my="left top" at="left bottom"
model="#{bean.menuModel}"/>
この場合、bean.menuModel はすぐにメニュー データを返すことができます。しかし、メニューデータを準備するために前処理が必要な別のケースもあります。だから私もこれを持っています。
<p:commandButton ajax="true" id="historyButton" action="#{bean.getHistory()}"
icon="ui-icon-note" style="height: 16px;"
onstart="workingDialog.show();"
oncomplete="workingDialog.hide(); historyMenu.show();">
<f:setPropertyActionListener value="#{searchItem}" target="#{bean.selectedSearchItem}" />
</p:commandButton>
<p:menu overlay="true" widgetVar="historyMenu" my="left top" at="left bottom"
model="#{searchBean.menuModel}"/>
つまり、ボタンをクリックすると、その行のメニュー データのロードを開始する bean.getHistory() が呼び出され、円形のアイコンでモーダル ダイアログが表示されます。ロードが完了すると、ダイアログが消えてオーバーレイ メニューが表示されます。私ができないのは、このシナリオの最後の部分です。上記のコードは例外を発生させます。
java.lang.NullPointerException
javax.faces.component.UIComponentBase.findComponent(UIComponentBase.java:561)
org.primefaces.component.menu.BaseMenuRenderer.encodeOverlayConfig(BaseMenuRenderer.java:138)
org.primefaces.component.menu.MenuRenderer.encodeScript(MenuRenderer.java:45)
org.primefaces.component.menu.BaseMenuRenderer.encodeEnd(BaseMenuRenderer.java:39)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
以下に示すコードは、メニュー関連のコードなしで正常に動作します。
<p:commandButton ajax="true" id="historyButton" action="#{searchBean.getHistory()}"
icon="ui-icon-note" style="height: 16px;"
onstart="workingDialog.show();"
oncomplete="workingDialog.hide();">
<f:setPropertyActionListener value="#{searchItem}" target="#{bean.selectedSearchItem}" />
</p:commandButton>
これは専門家にとっては簡単な質問だと思います。oncomplete からオーバーレイ メニューを開くにはどうすればよいですか?
前もって感謝します。