私は Primefaces 3.2 と JSF 2.0 を使用しています。
私のアプリケーションでは、ノードの選択によってナビゲーションが必要になる場合があります。問題は、「nodeSelectListener」属性が Primefaces 3.2 から削除されたように見えることです。
<p:Tree ...>
<p:ajax event="select" listener="#{treeBean.onNodeSelect}" />
</p:Tree>
それは私が使用してナビゲートすることだけを可能にします
ExternalContext ec = fc.getExternalContext();
ec.redirect(url);
ナビゲーション後にノードの選択がなくなったという事実がなければ、これは問題ありません。ツリーは、すべてのページでレンダリングされる facelet テンプレート内にあります。
私の問題は、Ajax を使用する場合、文字列を返すなど、従来の JSF ナビゲーションを使用してナビゲートできないことです。つまり、「myPage.xhtml」です。それはうまくいきません。
これに対するより良い解決策をどこでも探しましたが、「nodeSelectListener」が使用され、ツリーに ajax=false を設定する例しか見つかりません。それは少なくとも 3.2 より前です。リダイレクト後に選択した値をプログラムで設定するのも難しいようです。誰かがより良い解決策を持っていますか?
更新:ある程度機能するソリューションを見つけました:
onNodeSelect メソッドでは、これを使用します
FacesContext
.getCurrentInstance()
.getApplication()
.getNavigationHandler()
.handleNavigation(FacesContext.getCurrentInstance(),
"null", "myPage.xhtml");