2013-04-13 59 views
0

学习spring + jsp。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

回答

1

你需要给你的属性的属性名称:

model.addAttribute("expenses", expenses); 

背景: 如果未提供名称,Spring使用生成的名称是不一样的变量名。 docs解释了这一点:

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

+0

我必须给我的属性一个名字总是。我认为春天自动命名它,在我的情况下,它可能被命名为expenseList作为它的一个lisk,我是吗? –

+0

我记得过去我读过的关于现在不能记起的属性名称的东西。正如你所建议的代码现在workinh –

+0

列表呢?例如。列表费用 –

1
  1. 给它一个名称

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

  3. 总是将if/for/etc的主体放入{}中,即使是单线。

+0

感谢@Vitaly,第2点和第3点是不相关的,尽管最佳实践 –