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)