を作成するための PrimeFaces ダイアログを持つ JSF ページがいくつかありますPerson
。このダイアログにはファイルのアップロードが含まれているため、AJAX を使用したくありません。が作成されると、ダイアログは閉じられますPerson
。が作成されていない場合Person
(検証が失敗した場合など)、ダイアログが表示されます。
を使用してこれを行う人を見てきましvisible="#{not empty facesContext.messages}"
たが、呼び出されたメソッドはFacesMessage
いずれにせよ a を返すため、これを使用することはできません。
私が今持っているアイデアは、ビュー パラメーター (たとえば、showDialog) を生成して使用することvisible="#{param.showDialog}"
です。
ナビゲーション ケースを使用してみましたが、メソッドが複数のページから呼び出されるため、ビュー パラメーターのみを追加する汎用ナビゲーション ケースを作成できません。これはアイデアです:
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-action>#{personBean.create}</from-action>
<from-outcome>true</from-outcome>
<to-view-id>#{from-view-id}</to-view-id>
<redirect>
<view-param>
<name>showDialog</name>
<value>#{form-outcome}</value>
</view-param>
</redirect>
</navigation-case>
</navigation-rule>
ナビゲーション ケースを使用する場合のもう 1 つの問題は、ダイアログが複合タグであり、アクションが属性を使用して提供されることです。上記のようなナビゲーションケースを使用すると、 というメッセージが表示されますUnable to find matching navigation case with from-view-id '/test.xhtml' for action '#{cc.attrs.saveAction}' with outcome 'true'
。
最善/最も簡単な解決策は、ビュー パラメータをメソッドに追加することだと思います。ただし、requestmap は不変であり、String を含むものを返すこと?showDialog=true
もできません。