javax.el.PropertyNotFoundException: 属性 'genero' 在类型 model.RankingResult 上找不到

javax.el.PropertyNotFoundException: Property 'genero' not found on type model.RankingResult

我在尝试使用来自 class RankingResult 的简单 ArrayList 的信息填充 xml 文件时遇到上述错误。搜索了一圈之后,我发现大多数有这个错误的人都在 xml 中输入了错误,但这里似乎不是这种情况(如果是这样我会觉得很愚蠢)。

我已经有一个非常相似的事情在进行并且完美地工作(控制器重定向到 xml 发送对象的 ArrayList 然后由打印,所以我完全迷失在这里。

这是一些代码:

"ranking.jsp"xml

<?xml version="1.0" encoding="UTF-8"?>
<%@page contentType="application/xml" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<data>
    <c:forEach items="${results}" var="result">
        <tr>
            <td>${result.genero}</td>
            <td><c:out value="${result.quantidade}"/></td>
        </tr>
    </c:forEach>
</data>

控制器doPost()

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String ator = request.getParameter("ator");
    String diretor = request.getParameter("diretor");

    ArrayList<RankingResult> results = null;

    try{
        BuscaDAO b2DAO = new BuscaDAO();
        results = b2DAO.busca2(ator, diretor);

    } catch(DAOException | SQLException ex) {
        Logger.getLogger(Busca1.class.getName()).log(Level.SEVERE, null, ex);
    }

    request.setAttribute("results", results);
    request.getRequestDispatcher("/WEB-INF/xml/ranking.jsp").forward(request, response);    
}

调试确认 "results" ArrayList 已正确填充。

排名结果class:

public class RankingResult {
    public final String genero;
    public final int quantidade;

    public RankingResult(String genero, int quantidade){
        this.genero = genero;
        this.quantidade = quantidade;
    }
}

项目树:

消息完全正确。您的 class 中没有 属性 名字 genero。您有一个名为 genero 的 public field。但是 JSP EL 在 Java Bean properties 上工作。你需要

public String getGenero() {
    return this.genero;
}

您的 RankingResult class.

中的方法

使用 public 字段通常是不好的做法,并且不适用于 JSP EL,它是围绕 Java Beans 约定设计的。