JSF 2.0での暗黙的なナビゲーション

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 ** ファイルにページフロー(ナビゲーションルール)を宣言することはできます。

ソースコードをダウンロードする

ダウンロードする - JSF-2-Implicit-Navigation-Example.zip (10KB)