Teedaでログイン管理(2)

id:higayasuoさんに教わった通り、Map sessionScope を使って、セッション管理は上手くいきました。

やってみたこと。

  • セッション管理の検証として、表示回数countプロパティを追加。
  • メソッド起動検証用として、prerender, doLogin中にsysoutにてログを吐かせてみる。
  • loginMessageプロパティに初期メッセージを入れてみた。

で、以下結果。意図通りの動きは、意図通りでない動きはで書いてみました。
test.html

<!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:te="http://www.seasar.org/teeda/extension" xml:lang="ja" lang="ja">
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
  	<title>login test</title>
</head>
<body>
	<p><span id="count">n</span>回目の表示</p>
	<div id="isLoggedin">
		<p><span id="userId">ユーザ名</span>さんではない場合は、
		<a href="?doLogout">ログアウト</a>してください。</p>
	</div>
	<div id="isNotLoggedin">
		<form class="loginForm" method="POST">
			ユーザID <input id="userId" type="text"/><br/>
			パスワード <input id="password" type="password"/><br/>
			<input id="doLogin" type="submit" value="login"/>
		</form>
		<p><span id="loginMessage">ログイン成否表示場所</span></p>
	</div>
</body>
</html>

TestPage.class

package jp.xet.test.web.home;

import java.util.Map;

public class TestPage {

	private String userId;
	private String password;
	private String loginMessage = "初期メッセージ";
	private boolean loggedin;
	private int count;
	private Map sessionScope;
	
	public String getUserId() {
		return userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getLoginMessage() {
		return loginMessage;
	}

	public void setLoginMessage(String loginMessage) {
		this.loginMessage = loginMessage;
	}

	public boolean isLoggedin() {
		return loggedin;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	public void setSessionScope(Map sessionScope) {
		this.sessionScope = sessionScope;
	}

	@SuppressWarnings("unchecked")
	public String doLogin() {
		System.out.println("#### start doLogin() ####");
		if(userId.equals("cepoc") && password.equals("pass")) {
			sessionScope.put("loggedin", true);
			loginMessage = "ログイン成功";
		} else {
			sessionScope.put("loggedin", false);
			loginMessage = "ログイン失敗";
		}
		return null;
	}
	
	@SuppressWarnings("unchecked")
	public String doLogout() {
		sessionScope.put("loggedin", false);
		return null;
	}

	public String initialize() {
		return null;
	}

	@SuppressWarnings("unchecked")
	public String prerender() {
		System.out.println("#### start prerender() ####");
		if(sessionScope.get("loggedin") == null) {
			loggedin = false;
		} else {
			loggedin = (Boolean) sessionScope.get("loggedin");
		}
		
		if(sessionScope.get("count") == null) {
			sessionScope.put("count", 1);
		} else {
			sessionScope.put("count", (Integer)sessionScope.get("count")+1);
		}
		
		count = (Integer) sessionScope.get("count");
		
		return null;
	}

}

以上で、まずページにアクセスしてみる。

DEBUG 2007-03-16 22:08:12,500 [http-8080-Processor25] HOT deployを開始します
DEBUG 2007-03-16 22:08:12,593 [http-8080-Processor25] クラス(jp.xet.test.web.home.TestPage[home_testPage])のコンポーネント定義を登録します
DEBUG 2007-03-16 22:08:12,656 [http-8080-Processor25] BEGIN jp.xet.test.web.home.TestPage#initialize()
DEBUG 2007-03-16 22:08:12,656 [http-8080-Processor25] トランザクションを開始しました
DEBUG 2007-03-16 22:08:12,656 [http-8080-Processor25] トランザクションをコミットしました
DEBUG 2007-03-16 22:08:12,656 [http-8080-Processor25] END jp.xet.test.web.home.TestPage#initialize() : null
DEBUG 2007-03-16 22:08:12,656 [http-8080-Processor25] BEGIN jp.xet.test.web.home.TestPage#prerender()
DEBUG 2007-03-16 22:08:12,656 [http-8080-Processor25] トランザクションを開始しました
#### start prerender() ####
DEBUG 2007-03-16 22:08:12,656 [http-8080-Processor25] トランザクションをコミットしました
DEBUG 2007-03-16 22:08:12,656 [http-8080-Processor25] END jp.xet.test.web.home.TestPage#prerender() : null
DEBUG 2007-03-16 22:08:12,671 [http-8080-Processor25] [HtmlMessage] forComponent [login] is null. [id=loginMessage]
DEBUG 2007-03-16 22:08:12,671 [http-8080-Processor25] HOT deployを終了しました

何度かリロードして、カウントが増えることを確認

しかし、ログイン成否表示場所には何も表示されず。「初期メッセージ」と出て欲しいところなんですが。
まぁ、ここで user:aaaa pass:bbbb で submit してみる。

DEBUG 2007-03-16 22:14:10,359 [http-8080-Processor24] HOT deployを開始します
DEBUG 2007-03-16 22:14:10,437 [http-8080-Processor24] クラス(jp.xet.test.web.home.TestPage[home_testPage])のコンポーネント定義を登録します
DEBUG 2007-03-16 22:14:10,453 [http-8080-Processor24] BEGIN jp.xet.test.web.home.TestPage#prerender()
DEBUG 2007-03-16 22:14:10,453 [http-8080-Processor24] トランザクションを開始しました
#### start prerender() ####
DEBUG 2007-03-16 22:14:10,453 [http-8080-Processor24] トランザクションをコミットしました
DEBUG 2007-03-16 22:14:10,453 [http-8080-Processor24] END jp.xet.test.web.home.TestPage#prerender() : null
DEBUG 2007-03-16 22:14:10,468 [http-8080-Processor24] [HtmlMessage] forComponent [login] is null. [id=loginMessage]
DEBUG 2007-03-16 22:14:10,468 [http-8080-Processor24] HOT deployを終了しました

「#### start doLogin() ####」がログに表示されない


当然 loginMessage も無言