javax.el.PropertyNotFoundException: у класса 'java.lang.String' нет свойства - PullRequest
3 голосов
/ 06 сентября 2011

Я создаю приложение Sample 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 свойство имеет публичные геттеры и сеттеры.Этот класс 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> 

Но рекомендуетсярешение не работает :(

Ответы [ 3 ]

3 голосов
/ 19 февраля 2016

Это происходит, когда вы передаете String в EL-операцию c: forEach вместо итерируемого элемента, в следующем примере я пропускаю '$', поэтому он передает точную String без переменного разрешения.

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

Следующее верно, потому что операция - это строка [] в моем коде

<c:forEach var="o" items="${operations}">
2 голосов
/ 06 сентября 2011

Возможно, проверьте ваш импорт 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 и его геттеры? Под этим я имею в виду, что они public?

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

0 голосов
/ 06 сентября 2011

Попробуйте это:

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

И проверьте капитализацию ваших геттеров и установщиков, должно быть getDescription()

...