学习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
答案 0 :(得分:1)
您需要为属性指定属性名称:
model.addAttribute("expenses", expenses);
背景: 如果未提供名称,Spring将使用生成的名称,该名称与变量名称不同。 docs解释了这个:
根据具体类型确定提供的Object的常规变量名称。根据JavaBeans属性命名规则,使用的约定是返回类的非大写短名称:因此,com.myapp.Product成为产品; com.myapp.MyProduct成为myProduct; com.myapp.UKProduct成为UKProduct。
答案 1 :(得分:1)
给它起个名字
model.addAttribute("expenses", expenses);
返回ModelAndView。
永远将if / for / etc的主体包含在{}中,即使它是单行的。