index.xhtmlJSFフロントページにドロップダウンがあります。関連するコード/コマンドボタンは次のようになります。
<h:selectOneMenu id="nodes" value="#{MyBacking.chosenNode}">
<f:selectItems value="#{MyBacking.nodes}" />
</h:selectOneMenu>
<a4j:commandButton value="Retrieve" styleClass="ctrlBtn"
id="retrieveBtn" style="margin-bottom: 2px;"
onclick="#{rich:component('nodeLoadWait')}.show()" # modal
action="#{MyBacking.redirect}"
image="/img/btnRetrieve26.png" />
action
以前は「こんにちは」に設定されていましたが、私の場合はfaces-context.xml
:
<navigation-rule>
<from-view-id>/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>hello</from-outcome>
<to-view-id>/nodeMgmt.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
action
が「hello」に設定されている場合、retrieve
ボタンをクリックすると、その面で正常に機能し、navが処理され、MyBacking.setChosenNode
メソッドによって必要なすべてのデータが割り当てられるため、nodeMgmt.xhtmlのコンテンツが完全に入力されて表示されます。
ただし、ユーザーのクリックによる最初のアクティビティがretrieve
タイムアウトした場合、Beanがタイムアウトを検出してもWebページがハングするため、ユーザーを「タイムアウト」ページにリダイレクトしたいと思います。
タイムアウトメッセージ(アプリの「内部」にあるときにエラー検出がすでに存在する)を返すバッキングBeanを処理するために、faces-context.xml
ファイルを使用するのではなく、内部で処理することを考えました。
FacesContext.getCurrentInstance()。getExternalContext()。redirectを見つけましたが、JSF1.2javadocにはこれがありません。おそらくそれは特集されていないからですか?それは混乱を招きますがリダイレクトします。この方法に関するドキュメントがないのはなぜですか?
それでも、ページにリダイレクトされますが、最初のリクエスト中にBeanによってインスタンス化されたデータを考慮せずにレンダリングされます。Beanは現在リクエストスコープにあります。Beanの関連コードは次のとおりです。
try {
FacesContext.getCurrentInstance().getExternalContext().redirect("nodeMgmt.jsf");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
この種のリダイレクトを行うには、バックエンドJava呼び出しを使用するのが最善の方法ですか?そうでない場合は、使用するのが最善faces-context.xml
ですか?もしそうなら、どのように?私たちがここにいる間、誰かが私をFacesContext.getCurrentInstance()。getExternalContext()の使用法の良い読書リソースに導くことができますか?データcosで簡単なナビゲーションを行う方法についてのまともな例があります。
乾杯