JSF「アクションから」ナビゲーション・ルールの例
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.デモ
上記の場合、ボタンは次のように動作します。
-
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)