javax.el.PropertyNotFoundException:类“java.lang.String”;没有财产

发布于 2024-12-02 21:52:53 字数 1712 浏览 2 评论 0原文

我正在创建示例 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> 

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

I am creating Sample Spring MVC application. In my Controller class I have define like this:

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

        return new ModelAndView("hello", "model", myModel);

When I put following part in my JSP file i got javax.el.PropertyNotFoundException exception

<c:forEach items="${model.products}" var="prod">
        <c:out value="${prod.description}"/> <i>
lt;c:out value="${prod.price}"/></i><br><br>
    </c:forEach>

Here is my full exception :

javax.el.PropertyNotFoundException: The class 'java.lang.String' does not have the property 'description'.

But in my domain class private Sting description property has public getter and setter. That Product class is public one.

Product class:

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:

If I used like this it's working

<c:forEach items="${model.products}" var="prod"  varStatus="status">        
        <c:out value="${model.products[status.count -1].description}"/> <i>
lt;c:out value="${model.products[status.count -1].price}"/></i><br><br>
    </c:forEach> 

But recommended solution not working :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

寻找我们的幸福 2024-12-09 21:52:53

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

<c:forEach var="o" items="{operations}">

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

<c:forEach var="o" items="${operations}">

This happen when you are passing a String to an EL operation c:forEach instead of an iterable element, in the following example I miss the '$' so it's passing the exact String without variable resolution.

<c:forEach var="o" items="{operations}">

The next is right because operation is a String[] in my code

<c:forEach var="o" items="${operations}">
旧人九事 2024-12-09 21:52:53

也许检查您的 taglib 导入:

OLD

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

NEW

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

您的 Product 类及其 getter 是否可访问?我的意思是,它们是公开的吗?

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

Maybe check your taglib import:

OLD

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

NEW

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

Is your Product class and its getters accessible? By this I broadly mean are they public?

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

心是晴朗的。 2024-12-09 21:52:53

试试这个:

<c:forEach items="${model['products']}" var="oneProduct">
    <c:out value="${oneProduct.description}"/> <i>
lt;c:out value="${oneProduct.price}"/>                            
    </i><br><br>
</c:forEach>

并检查 getter 和 setter 的大小写,应该是 getDescription()

Try this:

<c:forEach items="${model['products']}" var="oneProduct">
    <c:out value="${oneProduct.description}"/> <i>
lt;c:out value="${oneProduct.price}"/>                            
    </i><br><br>
</c:forEach>

And check the capitalization of you gettters and setters, should be getDescription()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文