2017-06-25 6 views
0

Je reçois l'erreur ci-dessus en essayant de remplir un fichier xml avec des informations provenant d'une ArrayList simple de la classe RankingResult. Après avoir cherché autour, j'ai découvert que la plupart des gens avec cette erreur fait des fautes de frappe dans le xml, mais cela ne semble pas être le cas ici (je me sentirai vraiment stupide si c'est le cas).javax.el.PropertyNotFoundException: La propriété 'genero' est introuvable sur le modèle model.RankingResult

J'ai déjà une chose vraiment semblable passe et fonctionne parfaitement (contrôleur réoriente à un xml envoyer un ArrayList d'objets qui est ensuite imprimé par, donc je suis complètement perdu ici

Voici quelques code:.

Le "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> 

Controller 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);  
} 

Le débogage confirme que le résultat "ArrayList" est correctement rempli.

La classe RankingResult:

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

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

arbre du projet:

Project tree(1) Project tree(2)

Répondre

2

Le message est tout à fait raison. Il n'y a pas de nom de propriété genero dans votre classe. Vous avez un champ public nommé genero. Mais le JSP EL fonctionne sur Java Bean propriétés. Vous avez besoin d'une méthode dans votre classe RankingResult

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

. L'utilisation de champs publics est une mauvaise pratique en général, et ne fonctionnera pas avec JSP EL, qui est conçu autour des conventions Java Beans.

+0

Vous avez également absolument raison, je n'avais aucune idée. J'ai essayé d'utiliser des getters à un moment donné, mais je suppose que je n'ai pas fait attention aux résultats et j'ai pensé que le problème persistait. Je blâme [ce type] (https://stackoverflow.com/a/6271781/2870015) pour les champs publics tho: o). Merci beaucoup pour votre temps. – Panque