画面遷移の例(図8.1[画面遷移の例])を見てみましょう。
画面1のボタンを押したら、画面2が表示されています。このように、画面が切り替わることを「画面遷移」と言います。
まずはじめに、画面1のJSPのソースを見てみましょう。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<link href="style.css" type="text/css" rel="stylesheet" />
<title>JSF: 画面遷移のテスト</title>
</head>
<body>
<h1>JSF: 画面遷移のテスト</h1>
<f:view>
<h:form id="searchForm">
<p>1枚目のページだよ! ボタンをクリックしてね。</p>
<h:commandButton id="button1"
action="success" value="Go!" />
</h:form>
</f:view>
</body>
</html>
h:commandButtonというタグが出てきます。ボタンを表すUIコンポーネントです。
<h:commandButton id="button1"
action="success" value="Go!" />
ほかのUIコンポーネントと同様に、id属性があります。また、value属性の値は、ボタンにラベルとして書かれる文字になります。
action属性の値はoutcomeと言います。
Webブラウザ上でこのボタンが押されると、どこかのページに遷移します。このとき、どのページに遷移するかという情報を得るために、outcomeの値を使います。outcome・遷移元・遷移先の情報は、後述するfaces-config.xmlに記述します。
では、faces-config.xmlを見てみましょう。
<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<navigation-rule>
<from-view-id>/page1.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/page2.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
ここでは、navigation-ruleという要素が加わっています。このnavigation-rule要素に画面遷移の情報を記述します。
<navigation-rule>
<from-view-id>/page1.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/page2.jsp</to-view-id>
</navigation-case>
</navigation-rule>
まず、from-view-id要素では、遷移元となるJSPを記述しています。
<from-view-id>/page1.jsp</from-view-id>
次に、navigation-case要素です。
(page1.jspで) from-outcome要素にある"success"というoutcomeが返されたら、to-view-id要素の"/page2.jsp"に遷移することを表しています。
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/page2.jsp</to-view-id>
</navigation-case>
では、画面遷移の処理の流れについてまとめましょう。
ボタンが押されると、どこかのページに遷移します。このとき、どのページに遷移するかという情報を得るために、commandButtonタグのoutcomeを使います。outcome・遷移元・遷移先の情報は、faces-config.xmlに記述します。遷移元とoutcomeの情報により、遷移先が決定されるのです。
この章の冒頭で示した例では、このようにして画面1から画面2に遷移するのです。