ここに取り引きがあります: マネージド Bean のリストによって入力された dataTable があります。私が望むのは、選択したオブジェクトの情報を含む単純なプライムフェイス ダイアログを開くことです。setPropertyActionListener と onclick イベントを使用してそうしようとしています。
<p:commandButton id="basic" value="Resumo" onclick="dlg1.show();"
type="button"
>
<f:setPropertyActionListener target="#{consultaArtigoBean.artigoSelecionado}"
value="#{artigo}" />
</p:commandButton>
そして、ダイアログ
<p:dialog id="basicDialog" header="Resumo - #{consultaArtigoBean.artigoSelecionado.titulo}"
widgetVar="dlg1"
dynamic="true">
#{consultaArtigoBean.artigoSelecionado.resumo}
</p:dialog>
問題は、setPropertyActionListener が有効になる前にアクションが実行されることです。そのため、オブジェクトがまったくない状態でダイアログがポップアップします。
アクションの前に setProperty が実行され、オブジェクトが設定されるようにするにはどうすればよいですか。
アップデート
ここの別のトピックがこれに答えるのに役立ちました。 onclick イベントの後に h:outputLink から JSF に値を渡す
結果は次のとおりです。
<p:commandLink id="basic" value="Resumo"
oncomplete="dlg1.show();"
update="@form">
<f:setPropertyActionListener target="#{consultaArtigoBean.artigoSelecionado}"
value="#{artigo}" />
</p:commandLink>
とダイアログ
<p:dialog id="basicDialog" header="Resumo - #{consultaArtigoBean.artigoSelecionado.titulo}"
widgetVar="dlg1"
dynamic="true">
#{consultaArtigoBean.artigoSelecionado.resumo}
</p:dialog>