javax.el.PropertyNotFoundException:类“java.lang.String”没有该属性

Cha*_*ana 5 spring jsp jsp-tags spring-mvc

我正在创建示例 Spring MVC 应用程序。在我的控制器类中,我定义如下:

Map<String, Object> myModel = new HashMap<String, Object>();
        myModel.put("now", now);
        myModel.put("products", this.productManager.getProducts());

        return new ModelAndView("hello", "model", myModel);
Run Code Online (Sandbox Code Playgroud)

当我将以下部分放入 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>
Run Code Online (Sandbox Code Playgroud)

这是我的完整例外:

javax.el.PropertyNotFoundException: The class 'java.lang.String' does not have the property 'description'.
Run Code Online (Sandbox Code Playgroud)

但在我的域中,类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;
    }

}
Run Code Online (Sandbox Code Playgroud)

附:

如果我这样使用它就可以工作

<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> 
Run Code Online (Sandbox Code Playgroud)

但推荐的解决方案不起作用:(

lor*_*eii 5

当您将字符串传递给 EL 操作 c:forEach 而不是可迭代元素时,会发生这种情况,在下面的示例中,我错过了“$”,因此它传递了精确的字符串,而没有变量解析。

<c:forEach var="o" items="{operations}">
Run Code Online (Sandbox Code Playgroud)

下一个是正确的,因为操作在我的代码中是一个 String[]

<c:forEach var="o" items="${operations}">
Run Code Online (Sandbox Code Playgroud)

  • 由于一个愚蠢的原因,我们损失了 2 个小时...谢谢! (2认同)

Pau*_*ime 3

也许检查你的 taglib 导入:

老的

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
Run Code Online (Sandbox Code Playgroud)

新的

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
Run Code Online (Sandbox Code Playgroud)

你的Product类及其 getter 可以访问吗?我的意思是,他们是吗public

请参阅http://forum.springsource.org/showthread.php?58420-Problem-with-javax.el.PropertyNotFoundException