簡體   English   中英

為什么我不能從模型中檢索屬性,但能夠從JSP中檢索屬性?

[英]Why can't I retrieve an attribute from the Model but I'm able to from JSP?

我正在學習spring mvc,並了解Model和ModelAttribute的用法。 但是,我無法檢索Model的屬性,因此我求助於使用JSP param值。 我究竟做錯了什么? 我使用@ModelAttribute("username") User user / user.username檢查模型是否仍然具有該屬性的值,並確保足夠。

調節器

 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>

彈簧模型數據存儲在標准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";
    }

因此,您應該能夠在jsp中將其作為${option.username}

只需更改您的最后一個@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}。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM