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)