SAStrutsでsessionがうまく使えない

SAStrutsを使っていて、ユーザ情報がセッションに残らないという 事象が発生。

最終的に原因は「フィールドに対し、別インスタンスを設定していた」 ことだった。

《だめなコード》

public class LoginAction {
   @Resource
   public UserDto userDto;

   @Execute(validate="validate", input="index.jsp")
   public String login() {
       userDto = egsMUserService.getUser(loginForm.userid, loginForm.password);

       if (userDto == null) {
           addError(request, "error.login.incorrect");
           return "index.jsp";
       }

       return "/generate?redirect=true";
   }
 
}

《よいコード》

public class LoginAction {
   @Resource
   public UserDto userDto;

   @Execute(validate="validate", input="index.jsp")
   public String login() {
       UserDto userDto = egsMUserService.getUser(loginForm.userid, loginForm.password);

       if (userDto == null) {
           addError(request, "error.login.incorrect");
           return "index.jsp";
       }

       Beans.copy(userDto, this.userDto).execute();

       return "/generate?redirect=true";
   }

}

これ以外にも、context.xmlの書き換えが必要とか、 シリアルバージョンUIDがDTOについていなきゃだめとか、 いくつか注意事項あり。

最終更新:2015年03月30日 11:35