JSFナビゲーション・ルールでは、2つの別々のアクションが1つのページで同じ「

結果

」を返す状況が発生する可能性があります。この場合、「

from-action

」要素を使用して、2つのナビゲーションケースを区別することができます。次の例を参照してください。

1.マネージドBean

マネージドBean。同じ結果を返す2つのアクション – 「成功」。

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.io.Serializable;

@ManagedBean
@SessionScoped
public class PageController implements Serializable {

    private static final long serialVersionUID = 1L;

    public String processPage1(){
        return "success";
    }

    public String processPage2(){
        return "success";
    }
}

2. JSFページ

上記の `PageController`メソッドにリンクされた2つのボタンを持つJSFページ。

  • start.xhtml **

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">

    <h:body>
    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-2836379775501347"
     data-ad-slot="8821506761"
     data-ad-format="auto"
     data-ad-region="mkyongregion"></ins>
<script>
(adsbygoogle = window.adsbygoogle ||[]).push({});
</script><h2>This is start.xhtml</h2>

      <h:form>
        <h:commandButton action="#{pageController.processPage1}" value="Page1"/>
        <h:commandButton action="#{pageController.processPage2}" value="Page2"/>
      </h:form>

    </h:body>
</html>

どちらのアクションも、同じ “成功”結果を返します。JSFがどこに行くかを決める方法は?

3.ナビゲーションルール

これを解決するには、 “faces-config.xml”で以下のナビゲーションルールを定義し、 ”

from-action

“要素を使用して同じ “結果”ナビゲーションケースを区別します。

  • faces-config.xml **

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-facesconfig__2__0.xsd"
    version="2.0">

    <navigation-rule>
    <from-view-id>start.xhtml</from-view-id>
    <navigation-case>
        <from-action>#{pageController.processPage1}</from-action>
        <from-outcome>success</from-outcome>
        <to-view-id>page1.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-action>#{pageController.processPage2}</from-action>
        <from-outcome>success</from-outcome>
        <to-view-id>page2.xhtml</to-view-id>
    </navigation-case>
    </navigation-rule>
</faces-config>

4.デモ

上記の場合、ボタンは次のように動作します。


  1. action = “#\ {pageController.processPage1}”のボタンが

    の場合

クリックすると、「成功」の結果が返され、

page1.xhtml

に移動します。


action = “#\ {pageController.processPage2}”

のボタンが

クリックすると、「成功」の結果が返され、

page2.xhtml

に移動します。

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

ダウンロード – リンク://wp-content/uploads/2010/09/JSF-2-Form-Action-Navigation-Example.zip[JSF-2-From-Action-Navigation-Example.zip](11KB)