2017-11-08 21 views
1

私はspring mvcを学び、ModelとModelAttributeの使用法を理解しています。しかし、私はModelの属性を取得することはできませんので、JSPのparam値を使用しました。私は間違って何をしていますか?モデルにはまだ@ModelAttribute("username") User user/user.usernameを使用して属性の値が設定されていることが確認されました。なぜモデルから属性を取得できませんが、JSPから取得できますか?

コントローラ

package login.user; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
public class LoginUser { 

    @RequestMapping("/") 
    public String showMenu() 
    { 
     return "menu"; 
    } 

    @RequestMapping("login") 
    public String loginUser(Model model) 
    { 
     User newUser = new User(); 
     model.addAttribute("user", newUser); 
     return "login-user"; 
    } 

    @RequestMapping("processUser") 
    public String processUser(Model model) 
    { 
     Option newOption = new Option(); 
     model.addAttribute("option", newOption); 
     return "process-login"; 
    } 
} 

ユーザー

package login.user; 

public class User { 

    private String username; 
    private char password[]; 

    public String getUsername() { 
     return username; 
    } 
    public void setUsername(String username) { 
     this.username = username; 
    } 
    public char[] getPassword() { 
     return password; 
    } 
    public void setPassword(char[] password) { 
     this.password = password; 
    } 

} 

ログイン-user.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
<!DOCTYPE html> 
<html> 
<head> 
<link href="<c:url value="/resources/css/style.css" />" rel="stylesheet" type="text/css" /> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Login User</title> 
</head> 
<body> 
    <div> 
     <form:form action="processUser" modelAttribute="user"> 
      <table> 
      <tr> 
       <td>Username:</td> 
       <td> 
        <form:input path="username" /> 
       </td> 
      </tr> 
      <tr> 
       <td>Password:</td> 
       <td> 
        <form:input type="password" path="password" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <input type="submit" name="Login" /> 
       </td> 
      </tr> 
     </table> 
     </form:form> 
    </div> 

</body> 
</html> 

プロセスのlogin.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
<!DOCTYPE html> 
<html> 
<head> 

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
    <form:form modelAttribute="option"> 
     <h3>Welcome ${param.username}. Please choose an activity below</h3> <---- changed from ${user.username} 
     <div> 
      <form:select path="option"> 
       <form:option value="Email" label="Email"></form:option> 
       <form:option value="Enter Recipe" label="Enter Recipe"></form:option> 
       <form:option value="Retrieve Recipe" label="Retrieve Recipe"></form:option> 
      </form:select> 
     </div> 
    </form:form> 

</body> 
</html> 

答えて

1

次のようにちょうどあなたの最後の@RequestMapping方法を変更します。

@RequestMapping("processUser") 
    public String processUser(@ModelAttribute("user") User user, Model model) 
    { 
     Option newOption = new Option(); 
     model.addAttribute("user", user); 
     model.addAttribute("option", newOption); 
     return "process-login"; 
    } 

は今、JSPで$ {user.username}を使用しています。

+0

ありがとうございます – Mushy

1

スプリングモデルデータは、標準Java要求スコープに格納されます。ユーザー名を取得しようとしている場合は、再度リクエストスコープに追加する必要があります。したがって、次のようにprocessUserメソッドを記述することができます。

@RequestMapping("processUser") 
    public String processUser(@ModelAttribute("user") User user,Model model) 
    { 
     Option newOption = new Option(); 
     // do stuff with user data 
     newOption.setUsername(user.getUsername()); 
     model.addAttribute("option", newOption); 
     return "process-login"; 
    } 

だから、あなたは${option.username}として、JSPでそれを得ることができる必要があります。

+0

リクエストスコープの制約をご説明いただきありがとうございます – Mushy

関連する問題