【发布时间】:2011-11-11 04:37:08
【问题描述】:
我正在创建示例 Spring MVC 应用程序。在我的 Controller 类中,我这样定义:
Map<String, Object> myModel = new HashMap<String, Object>();
myModel.put("now", now);
myModel.put("products", this.productManager.getProducts());
return new ModelAndView("hello", "model", myModel);
当我将以下部分放入我的 JSP 文件时,我得到了 javax.el.PropertyNotFoundException 异常
<c:forEach items="${model.products}" var="prod">
<c:out value="${prod.description}"/> <i>$<c:out value="${prod.price}"/></i><br><br>
</c:forEach>
这是我的全部例外:
javax.el.PropertyNotFoundException: The class 'java.lang.String' does not have the property 'description'.
但在我的域类 private Sting description 属性中具有公共 getter 和 setter。 Product 课程是公共课程。
产品类别:
public class Product implements Serializable {
private String description;
private Double price;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
}
PS:
如果我这样使用它就可以了
<c:forEach items="${model.products}" var="prod" varStatus="status">
<c:out value="${model.products[status.count -1].description}"/> <i>$<c:out value="${model.products[status.count -1].price}"/></i><br><br>
</c:forEach>
但推荐的解决方案不起作用:(
【问题讨论】:
-
对我来说似乎很好。我会通过在
<c:out>行之前打印它的值来仔细检查您期望在prod中的值是否在prod中。 -
我已将代码更改为:
<c:forEach items="${model.products}" var="prod"> <c:out value="${prod}"/> </c:forEach>现在输出为:[Description: Lamp;Price: 5.75 Description: Table;Price: 75.25 Description: Chair;Price: 22.79] -
如果您尝试在
<c:forEach>之前直接使用EL 访问第一项,会发生什么情况?例如<c:out value="${model.products[0].description}"/> -
<c:out value="${model.products[0].description}"/>将值显示为`Lamp` -
在
<c:out>之前使用<c:set var="prod1" value="${prod}"/>然后在<c:out>中使用prod1而不是prod怎么样?
标签: spring jsp spring-mvc jsp-tags