Spring模型属性/ jsp不可见

时间:2013-04-13 20:13:24

标签: java spring jsp jstl

学习spring + jsp。

我在控制器的方法中设置了一个模型属性

@RequestMapping("/viewExpenses")
public String viewAllExpenses(Model model){

    List<Expense> expenses;
    expenses = expenseService.getAllExpenses();
    model.addAttribute(expenses);
    for(Expense e : expenses)
    System.out.println(e);
    return "viewExpenses";
}

费用大小> 1

Following is my jsp page:
<%@ taglib prefix="s" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>  
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Home Page</title>
</head>
<body>
<h2>
    Hello ${user.firstName} <br> <a href="homepage">HOME</a>
</h2>
<div>All Expenses</div>
<span style=""></span>
<c:forEach var="expense" items="${expenses}">
    <c:out value="${expense.expenseId}"></c:out>
    <c:out value="${expense.expenseName}"></c:out>
    <c:out value="${expense.expenseType}"></c:out>
    <c:out value="${expense.expensePrice}"></c:out>
    <c:out value="${expense.purchaseDate}"></c:out>
    <c:out value="${expense.expenseComments}"></c:out>
</c:forEach>
</body>
</html>

以下是我从jsp输出的内容(无错误): 你好Pravat 家 所有费用

我想知道为什么费用没有填入我的jsp

2 个答案:

答案 0 :(得分:1)

您需要为属性指定属性名称:

model.addAttribute("expenses", expenses);

背景: 如果未提供名称,Spring将使用生成的名称,该名称与变量名称不同。 docs解释了这个:

  

根据具体类型确定提供的Object的常规变量名称。根据JavaBeans属性命名规则,使用的约定是返回的非大写短名称:因此,com.myapp.Product成为产品; com.myapp.MyProduct成为myProduct; com.myapp.UKProduct成为UKProduct。

答案 1 :(得分:1)

  1. 给它起个名字

    model.addAttribute("expenses", expenses);
    
  2. 返回ModelAndView。

  3. 永远将if / for / etc的主体包含在{}中,即使它是单行的。