前提・実現したいこと
springでセッションにFormオブジェクトを受け渡したいのですが、
うまくいきません。
発生している問題・エラーメッセージ
ログインに成功した際にユーザ情報(ID,PW,ロール[adminかuser])を セッションで受け渡したいです。 ログインページではIDとPWのみ打つのでそれを基にDBからロールを引っ張ってきて セッションに格納しているのですが、ロールがnullになってしまいます。 どなたかご教授お願いいたします。
該当のソースコード
ユーザ情報を格納するフォームクラス
java
1 2public class LoginForm { 3 4 private String userId; 5 private String password; 6 private String role; 7 8 public String getUserId() { 9 return userId; 10 } 11 public void setUserId(String userId) { 12 this.userId = userId; 13 } 14 public String getPassword() { 15 return password; 16 } 17 public void setPassword(String password) { 18 this.password = password; 19 } 20 public String getRole() { 21 return role; 22 } 23 public void setRole(String role) { 24 this.role = role; 25 } 26} 27
コントローラクラス(DB周りの記述は割愛しました)
java
1@Controller 2@SessionAttributes(value = "userSession") 3public class HomeController { 4 5 @Autowired 6 private JdbcTemplate jdbcTemplate; 7 //ログインページの表示 8 @RequestMapping(value = "/", method = {RequestMethod.GET, RequestMethod.POST}) 9 public String loginView() { 10 return "login"; 11 } 12 //ログイン処理 13 @RequestMapping(value = "/login", method = RequestMethod.POST) 14 public String login(Model model, @ModelAttribute("LoginForm")LoginForm loginForm) { 15 loginForm.setRole("adimins");//本当はDBからロールの値を受け取る 16 setLoginForm(loginForm); 17 return "forward:home"; 18 } 19 //ホーム画面にセッション情報を受けわたして表示 20 @RequestMapping(value = "/home", method = {RequestMethod.GET, RequestMethod.POST}) 21 public String home(Model model, @ModelAttribute("userSession")LoginForm userSession) { 22 model.addAttribute("user", userSession); 23 return "home"; 24 } 25 26 @ModelAttribute("userSession") 27 public LoginForm setLoginForm(LoginForm loginForm){ 28 return loginForm; 29 } 30
ログインページのjsp
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form"%> 5 6<%@ page session="false" %> 7<html lang="ja"> 8 <head> 9 <title>ログイン画面</title> 10 </head> 11 <body> 12 <h2>つぶやきアプリ</h2> 13 <h3>ログイン</h3> 14<f:form modelAttribute="LoginForm" action="/TsubuyakiApp/login" method="post"> 15 <p>ユーザID:<input type="text" name="userId" required/></p> 16 <p>パスワード:<input type="text" name="password" required/></p> 17 <input type="submit" name="login" value="ログイン" /> 18 <input type="reset" name="reset" value="リセット" /> 19 </f:form>> 20 </body> 21</html>
ホーム画面のjsp
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4 5<html> 6<head> 7 <title>一覧表示画面</title> 8</head> 9<body> 10<h2>つぶやきアプリ</h2> 11 <br> 12 <p> 13 <c:out value="${user.getUserId()}" /> <a href="logout">ログアウト</a> 14 <c:if test="${user.getRole().equals('admins')}" ><!--ここが機能しなくて困ってます --> 15 <a href="userList">ユーザ管理</a> 16 </c:if> 17 18 </p> 19 <input type="button" onclick="location.href='tweet'"value="書き込み"> 20 <br> 21 <table border="1" cellspacing="0"> 22 <tr> 23 <th>名前</th> 24 <th>つぶやき</th> 25 <th>日時</th> 26 </tr> 27 <c:forEach var="str" items="${list}"> 28 29 <tr> 30 <td><a href="personTweetList/${str.NAME}"><c:out value="${str.NAME}" /></a></td> 31 <td><c:out value="${str.TSUBUYAKI}" /></td> 32 <td><c:out value="${str.DATE}" /></td> 33 </tr> 34 </c:forEach> 35 36</table> 37</body> 38</html> 39 40
試したこと
ロールだけnullになってしまうのでロールは別にStringの変数としてセッションに格納しようとしても
nullでした。。。
また、セッション格納の際@ModdelAttributeではなく、model.addAttributeでもできるというサイトがあったので、それも試しましたが変わらずでした。
補足情報(FW/ツールのバージョンなど)
STS3.7.3.RELEASE
macOS Sierra
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。