ナビゲーション・ルールを作成する
では、実際に簡単なページ移動を行ってみましょう。ここでは「page1.jsp」と「page2.jsp」という2つのJSPファイルがあるものとして、page1.jspからpage2.jspへの移動を用意しましょう。
<navigation-rule>
<display-name>page1</display-name>
<from-view-id>/page1.jsp</from-view-id>
<navigation-case>
<from-outcome>toPage2</from-outcome>
<to-view-id>/page2.jsp</to-view-id>
</navigation-case>
</navigation-rule>
まず、faces-config.xmlの<faces-config>タグ内に、このようにナビゲーション・ルールのタグを記述します。ここでは、「toPage2」という名前で、page1.jspからpage2.jspへの移動を登録していますね。これで、toPage2を呼び出せば、そのままpage2.jspへの移動が実行されるようになります。
JSPタグから直接ページ移動を呼び出す
では、このナビゲーション・ルールはどういうタイミングで呼び出せばいいのでしょうか。これは、一番簡単な呼び出し方としては、JSP側のタグのactionに指定する、という方法があります。
※page1.jsp内に記述
<f:view>
<h:outputText value="JSF Page 1" id="text0"
style="color: #0000AA; font-size: 18px; font-weight: bold" />
<br /><br />
<h:outputText value="これは、JSFによる表示です。" id="text1"
binding="#{page1Bean.text1}" escape="false" />
<h:form>
<h:commandButton value="送信" action="toPage2" />
</h:form>
</f:view>
ボタンをクリックすると、ナビゲーションルールをもとにページ移動が実行される。 |
ざっとこんな感じになるでしょう。<h:commandButton>タグを見ると、action="toPage2"と設定がされているのがわかります。actionに、このように<from-outcome>タグの値を記述してください。これで、ボタンをクリックすると、actionに指定しておいたナビゲーション・ルールが呼び出され、ページ移動を行うようになります。Javaのソースコードは一切書く必要がありません。
アクションからの呼び出し
では、Beanクラスの内部からナビゲーションを呼び出すにはどうすればよいか。これも実は簡単です。やってみましょう。まず、page1.jspに用意した<h:commandButton>タグのactionを、action="#{page1Bean.button1_action}"と修正しましょう。
そしてpage1Beanのクラス内に、以下のような形でbutton1_actionを用意します。これで先ほどと同じように、ボタンをクリックするとページ移動を行うようになるでしょう。
public String button1_action(){
return "toPage2";
}
actionに関連付けをするメソッドは、返値にStringをreturnするようになっていました。この「返す値」がどういうものか、まだ説明していませんでしたね。これは、「ページ遷移に関する情報」を返すのです。これまでは、ページを移動する必要がありませんでしたから、return null;として何も返さないようにしていました。が、今はページ移動の情報がJSFの設定ファイルにありますから、これを呼び出すだけです。return "toPage2";とすれば、toPage2という名前のページ移動を実行します。Bean側で何らかの処理をしてからページ移動をするような場合は、こちらを使ったほうが便利ですね。