[Seasar-user:8146] @RemoveSessionが機能しません

亀田一郎 [E-MAIL ADDRESS DELETED]
2007年 6月 7日 (木) 10:56:49 JST


小林さん、Interceptorに対するDTOのDIについてはお世話になりました。
Interceptorの問題の時、本件も同時に発生していました。
Interceptorの件が解決しましたので、@RemoveSessionが
機能しない件についてあらためて投稿させて頂きます。


【処理概要(テスト手順)】
1.login2.htmlを表示し、ログインします。
2.メニュー画面に戻ります
  3.ログオフボタンが表示されるので、クリックします。

【問題】
・ログオフボタンをクリックすると doLogout()が呼び出されますが、
loginUserDtoは削除されません。
    つまり、@RemoveSession(name="loginUserDto")が機能していません。
  ・本件もS2Container-2.4.10,Teeda-1.0.4では正常に動作しますが、
    S2Container-2.4.13,Teeda-1.0.7では@RemoveSessionが機能しません。

【login2.html】
...省略...
<form class="loginForm" method="POST">
<div id="isLoggedin">
<p>ログイン済みです</p>
<input id="doLogout" type="submit" value="ログオフ"/>
</div>
<div id="isNotLoggedin">
<table border="2">
<tr><td class="table_td">ユーザID</td><td><input id="userId"
type="text"/></td></tr>
<tr><td class="table_td">パスワード</td><td><input id="password"
type="password"/></td></tr>
<tr><td colspan="2" align="center">
<input id="doLogin" type="submit" value="ログイン" style="{cursor:hand}"/>
</td></tr>
...省略...

【Login2Page】

package test.web.login2;

...省略(import)...

public class Login2Page {

... 省略(プロパティ、ゲッター、セッター)....

  private LoginUserDto loginUserDto;                    //DtoをDIする
  public void    setLoginUserDto(LoginUserDto loginUserDto) {
    this.loginUserDto = loginUserDto;
  }

  public String doLogin() {
...省略(ログインチェック、ログイン情報のloginUserDtoへの格納)...
  }

  @RemoveSession(name="loginUserDto")
  public String doLogout() {
    System.out.println("#### start doLogout() ####");
    return null;
  }
}

【LoginUserDto.java】
package test.web.dto;
import org.seasar.framework.container.annotation.tiger.*;

@Component(instance = InstanceType.SESSION)
public class LoginUserDto {

  private String userId;
  private boolean authed;
...省略(ゲッター、セッター)...
}
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20070607/276296d1/attachment.html 
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20070607/276296d1/attachment-0001.html 
-------------- next part --------------
package test.web.dto;
import org.seasar.framework.container.annotation.tiger.*;

@Component(instance = InstanceType.SESSION)
public class LoginUserDto {

  private String userId;                     
  private boolean authed;                    

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

  public boolean isAuthed()                  { return authed;          }
  public void    setAuthed(boolean authed)   { this.authed = authed;   }

}

-------------- next part --------------
package test.web.login2;

import javax.servlet.http.HttpSession;
import java.util.*;

import org.seasar.framework.container.annotation.tiger.*;
import org.seasar.framework.aop.annotation.*;

import test.web.dto.*;

public class Login2Page {

  private String  userId;
  private String  password;
  private boolean loggedin=true;
  private String  loginMsg = "〓〓〓〓〓〓〓b〓Z〓[〓W";

  private LoginUserDto loginUserDto;
	
  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  getLoginMsg()                { return loginMsg;          }
  public void    setLoginMsg(String loginMsg) { this.loginMsg = loginMsg; }

  public boolean isLoggedin()                 { return loggedin;          }
  public boolean getLoggedin()                { return loggedin;          }
  public void    setLoggedin(boolean loggedin) { this.loggedin = loggedin; }

  public void    setLoginUserDto(LoginUserDto loginUserDto) {
    this.loginUserDto = loginUserDto;
  }

  public String doLogin() {
    System.out.println("#### start doLogin() ####");
    if(userId.equals("user") && password.equals("user")) {
      loginUserDto.setAuthed(true);
      loginUserDto.setUserId(userId);
      loginMsg = "〓〓〓O〓C〓〓〓〓〓〓";
      loggedin = true;
      return "success";
    } else {
      loginUserDto.setAuthed(false);
      loginMsg = "〓〓〓O〓C〓〓〓〓〓s";
      loggedin = false;
      return null;
    }
 
  }

  @RemoveSession(name="loginUserDto")
  public String doLogout() {
    System.out.println("#### start doLogout() ####");
    return null;
  }

  public String prerender() {
    System.out.println("#### start prerender() ####");

    if(loginUserDto.isAuthed()) {
      loggedin = true;
    } else {
      loggedin = false;
    }

    return null;
  }

}



Seasar-user メーリングリストの案内