JSF 1.2では、すべてのページ・ナビゲーションが次のように “faces-config.xml”ファイルで宣言する必要があります。
... <ナビゲーションルール> <from-view-id> page1.xhtml </from-view-id> <ナビゲーションケース> <from-outcome> page2 </from-outcome> <to-view-id>/page2.xhtml </to-view-id> </navigation-case> </navigation-rule> ...
JSF 2では、ページ名として「結果」を扱います。たとえば、「page1.xhtml」にナビゲートする場合は、「結果」を「page1」とする必要があります。このメカニズムは ”
暗黙のナビゲーション
“と呼ばれ、面倒なナビゲーションルールを宣言する必要はなく、アクション属性に直接 “結果”を入れてJSFが正しい ”
id id
“を自動的に見つけます。
JSF 2で暗黙のナビゲーションを実装するには、2つの方法があります。
1. JSFページの結果
JSFページに直接「結果」を入れることができます。
<h:form> <h:commandButton action="page2" value="Move to page2.xhtml"/> </h:form>
ボタンがクリックされると、JSFはアクション値または結果 ”
page2
“を ”
xhtml
“という拡張子にマージし、現在の ”
page1.xhtml
“のビュー名 ”
page2.xhtml
ディレクトリ。
2.マネージドビーンの成果
また、マネージドBeanで「結果」を次のように定義することもできます。
-
PageController.java **
@ManagedBean @SessionScoped public class PageController implements Serializable { public String moveToPage2(){ return "page2";//outcome } }
JSFページのaction属性で、 ”
method expression
“を使用してメソッドを呼び出します。
-
page1.xhtml **
<h:form> <h:commandButton action="#{pageController.moveToPage2}" value="Move to page2.xhtml by managed bean"/> </h:form>
リダイレクション
デフォルトでは、JSF 2は別のページにナビゲートしている間、フォワードを実行するため、ページURLは常に1つ後ろにあります:)。たとえば、「page1.xhtml」から「page2.xhtml」に移動すると、ブラウザのURLアドレスバーには同じ「page1.xhtml」URLが表示されます。
これを避けるには、リダイレクトを使用するようJSFに指示して、 ”
faces-redirect = true
“を “outcome”文字列の最後に追加します。
<h:form> <h:commandButton action="page2?faces-redirect=true" value="Move to page2.xhtml"/> </h:form>
-
注意
単純なページナビゲーションでは、この新しい暗黙のナビゲーションで十分です。複雑なページナビゲーションの場合、
faces-config.xml ** ファイルにページフロー(ナビゲーションルール)を宣言することはできます。