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についていなきゃだめとか、 いくつか注意事項あり。