Teedaチュートリアル4-2


このチュートリアル4-2では画面遷移の仕方について学びます。


4-1での作成したhtmlとPageとして、addInput.html/AddInputPage.javaがあります。

これらは入力画面とそのPageなので次に出力画面・そのPageクラスを作成します。

addResult.htmlは下記のようになります。

<?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" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form id="Form">
<table>
	<tr><td><span id="arg1" /></td></tr>
	<tr><td><span>&nbsp;+&nbsp;</span></td></tr>
	<tr><td><span id="arg2" /></td></tr>
	<tr><td><span>&nbsp;=&nbsp;</span></td></tr>
	<tr><td><span id="result" /></td></tr>
</table>
</form>
</body></html>


それにAddResultPage.javaは下記のようになります。

package examples.teeda.web.add;

public class AddResultPage {

	public String arg1;
	public String arg2;
	public String result;

	public Class initialize() {
		return null;
	}

	public Class prerender() {
		return null;
	}

}


これで足し算画面の入力・出力ともに作成できました。

(入力値検証(Validation)などは後で説明するのでこのチャプターでは省略します)

では次のステップとしてaddInput.htmlからaddResult.htmlへ遷移させてみます。

ボタンによる画面遷移は4-1で作成したdoメソッドの中で行います。具体的にはdoメソッドの

戻り値によって、Teedaが適切に判断してくれます。

戻り値は下記の型を取ることが出来ます。

説明
Class型 指定したPageクラスに紐付くhtmlに遷移する
String型 JSFのナビゲーション(outcome)を指定する
Void型 遷移せずに同一画面に戻る

TeedaではClass型で戻り値を返すことを推奨しています。

ではAddInputPageに計算ロジックと共に埋めてみます。

AddResultPageと対応関係にあるaddResult.htmlに遷移したいので、

AddResultPage.classと記述します。下記のようになります。


package examples.teeda.web.add;

public class AddInputPage {

	public Integer arg1;
	public Integer arg2;

	public Integer result;

	public Class doCalculate() {
		return AddResultPage.class;
	}

	public Class initialize() {
		return null;
	}

	public Class prerender() {
		return null;
	}

}

実際の計算ロジックはAddResultPageに埋め込みます。

initialize()というメソッド内に書いていますが、初期化のためのメソッドくらいに

今は覚えておいて頂いてかまいません。後ほどライフサイクルメソッドのところで詳細に説明します。


package examples.teeda.web.add;

public class AddResultPage {

	public Integer arg1;
	public Integer arg2;
	public Integer result;

	public Class initialize() {
		result = new Integer(arg1.intValue() + arg2.intValue());
		return null;
	}

	public Class prerender() {
		return null;
	}

}


これで最も基本的な画面遷移の機能は抑えました。

ではもう少し詳細について抑えていきましょう。

既に説明した画面遷移の基本パターンは、submitボタンの場合でした。

ではaタグでの遷移の場合はどうなるのでしょうか?

aタグでは下記のような形式で書きます。繰り返しになりますが、Teedaの基本は全く変わりません。

Teedaに処理してほしいタグにidを採番するだけです。

<a id="goAddResult" href="addResult.html?arg1=123&arg2=223">計算結果画面へ遷移する</a>

idの部分に注目してみてみてください。goXxxという形式になっているのがわかると思います。

そうdoと同じようにgoという遷移のやり方です(以下goメソッドと呼びます)。

goメソッドは、リンクのようなPageクラスのメソッド呼び出しを行わないで遷移を行う場合に使います。

aタグで説明しましたが、もちろんボタンでも使うことが出来ます。

これと同じようにjumpメソッドというのもあります。下記のように書きます。

<a id="jumpAddResult" href="addResult.html?arg1=123&arg2=223">計算結果画面へ遷移する</a>

go/jumpの共通点はPageクラスの特定メソッドの呼び出しは発生しないことです(ライフサイクルメソッドは別)。

例えばaタグの場合は、href属性をみて遷移先を決めます。

ではgoメソッドとjumpメソッドの違う部分は何でしょうか?

それはgoメソッドは後述する入力値検証が発生するのに大して、jumpメソッドは入力値検証をしません。

これが違いになります。goメソッドを使う場合は入力値をきちんと検証して次の画面に遷移する場合に使い、

jumpメソッドは入力値の検証など必要なくただ単純に遷移する場合に使います。

では改めてdo/go/jumpメソッドをまとめてみます。

Teeda遷移メソッド名 入力値検証 Pageクラスのメソッド呼び出し 仕様用途
do する 呼び出す 入力値のPOSTなどサーバ側の状態を変える場合
go する 呼び出さない サーバ側の状態は変えずに次の画面へ値を渡したい場合
jump しない 呼び出さない サーバ側の状態は変えず、かつ戻るボタンのような単純遷移の場合


・ここまでのまとめ

 ・Teedaの画面遷移としてはdo/go/jumpメソッドがある

 ・doメソッドはPageクラスの特定のメソッドを呼び出し、戻す型によって違いがある

 ・go/jumpメソッドは、リンクなどサーバ側の状態を変えずに遷移させる場合に主に使用する。

 ・goとjumpメソッドの違いは、goメソッドは入力値検証が入り、jumpメソッドは入力値検証がない


4-2では、Teedaの画面遷移の方法を学びました。