javax.El.PropertyNotFoundException: la Propriété 'foo' non trouvé sur le type de com.exemple.Haricot

j'ai des résultats de

Query query = session.createQuery("From Pool as p left join fetch p.poolQuestion as s");

requête et je voudrais l'afficher sur JSP.

j'ai une boucle:

<c:forEach items="${pools}" var="pool"> 

    <p>${pool.name}</p>

</c:forEach>

et je voudrais afficher les résultats de poolQuestion tableau (qui est de la table de Jointure). La valeur que je veux montrer est de "répondre".

Comment puis-je le faire?

<c:forEach items="${pools}" var="pool"> 
    <p>${pool.answer}</p>
    <p>${pool.name}</p>             
</c:forEach>

Le code ci-dessus ne fonctionne pas.

L'erreur est:

  org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/home.jsp at line 21

18:     <c:forEach items="${pools}" var="pool"> 
19:             
20:             <p>${pool.name}</p>
21:             <c:out value="${pool.poolQuestion.answer}"/>
22:             
23:     </c:forEach>
24: 

    SEVERE: Servlet.service() for servlet appServlet threw exception
javax.el.PropertyNotFoundException: Property 'answer' not found on type com.pool.app.domain.Pool
    at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:214)
    at javax.el.BeanELResolver$BeanProperties.access0(BeanELResolver.java:191)
    at javax.el.BeanELResolver.property(BeanELResolver.java:300)
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:81)
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:123)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:938)
    at org.apache.jsp.WEB_002dINF.views.home_jsp._jspx_meth_c_005fforEach_005f0(home_jsp.java:119)
    at org.apache.jsp.WEB_002dINF.views.home_jsp._jspService(home_jsp.java:78)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:680)

Le modèle est le suivant:

public List<Pool> getAll(){

    Session session = sessionFactory.getCurrentSession();

    Query query = session.createQuery("From Pool as p left join fetch p.poolQuestions as s");

    return query.list();

Le contrôleur est:

List<Pool> pool = poolService.getAll();

model.addAttribute("pools", pool);

Et le point de Vue est le suivant:

<c:forEach items="${pools}" var="pool"> 

    <p>${pool.name}</p>
    <c:out value="${pool.answer}"/>

</c:forEach>

PS. ${pool.name} est affiché correctement

17
demandé sur ROMANIA_engineer 2011-12-20 19:12:32

5 réponses

javax.El.PropertyNotFoundException: la Propriété 'foo' non trouvé sur le type de com.exemple.Bean

Cela signifie littéralement que la catégorie com.example.Bean n'ont pas de public (non-statique!) méthode de lecture pour la propriété nommée foo. Notez que le champ lui-même n'est pas pertinent ici!

le nom de la méthode public getter doit commencer par get, suivi du nom de la propriété qui est capitalisé seulement à la première lettre du nom de la propriété comme dans Foo.

public Foo getFoo() {
    return foo;
}

vous devez donc vous assurer qu'il y a une méthode getter correspondant exactement au nom de la propriété, et que la méthode est public ( non -static), et que la méthode ne prend pas d'argument et qu'il renvoie nonvoid. Si vous en avez un et qu'il ne fonctionne toujours pas, alors il y a des chances que vous ayez été occupé à éditer du code avant et arrière sans nettoyer fermement la construction, reconstruire le code et redéployer/redémarrer l'application. Vous devez vous assurer que vous avez fait.

boolean (pas Boolean!) propriétés, le nom de la méthode getter doit commencer par is au lieu de get.

public boolean isFoo() {
    return foo;
}

quel que soit le type, la présence du foo champ lui-même est donc pertinentes. Il peut avoir un nom différent, ou être complètement absent, ou même être static. Tout ce qui suit doit être accessible par ${bean.foo}.

public Foo getFoo() {
    return bar;
}

public Foo getFoo() {
    return new Foo("foo");
}

public Foo getFoo() {
    return FOO_CONSTANT;
}

vous voyez, le champ n'est pas ce qui compte, mais la méthode getter elle-même. Notez que le nom du bien lui-même ne doit pas être capitalisé en EL. En d'autres termes, ${bean.Foo} ne jamais le travail, il doit être ${bean.foo}.

Voir aussi:

56
répondu BalusC 2017-05-23 11:46:38

je crois que les accesseurs d'id ne correspondent pas aux conventions de nommage des haricots et c'est pourquoi l'exception est lancée. Ils doivent être comme suit:

public Integer getId() { return id; }    
public void setId(Integer i){ id= i; }
5
répondu Fakher 2015-01-18 15:43:25

EL interprète ${class.name} comme décrit - le nom devient getName () sur l'hypothèse que vous utilisez des méthodes explicites ou implicites pour générer getter/setters

vous pouvez outrepasser ce comportement en identifiant explicitement le nom comme une fonction: ${class.name()} ceci appelle le nom de la fonction() directement sans modification.

0
répondu sdw 2018-08-18 23:38:20

j'obtiens la même erreur sur mon JSP et la mauvaise réponse cotée était correcte

j'ai eu le après la ligne:

et obtenir ce qui suit erreur:

javax.El.PropertyNotFoundException: propriété 'agent' introuvable sur type Java.lang.Chaîne

supprimer l'espace avant ${userList} résolu mon problème

Si certains ont le même problème, il va trouver rapidement ce poste et ne perd pas 3 jours à googeling pour trouver de l'aide.

-1
répondu DOM67 2018-10-12 12:21:52

je faisais face au même type de problème: Extrait De Code :

<c:forEach items="${orderList}" var="xx"> ${xx.id} <br>

</c:forEach>

Il y avait un espace après orderlist comme ceci: "$ {orderList} " en raison de laquelle la variable xx s'est couverte dans la chaîne et n'a pas été en mesure d'appeler xx.id.2-->

assurez-vous donc de l'espace. Ils jouent parfois un rôle crucial. :p

-2
répondu Rajat 2018-02-03 22:12:28