javax.el.PropertyNotFoundException: La propriété 'foo' est introuvable sur le type com.example.Bean
J'ai les 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 loop:
<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.access$400(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:
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 la Vue est:
<c:forEach items="${pools}" var="pool">
<p>${pool.name}</p>
<c:out value="${pool.answer}"/>
</c:forEach>
PS. le ${pool.name}
s'affiche correctement
source d'informationauteur Ilkar
Vous devez vous connecter pour publier un commentaire.
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éefoo
. Notez que le champ lui-même est hors de propos ici!Le public méthode de lecture nom doit commencer par
get
suivi par le nom de la propriété qui est en majuscule à la première lettre du nom de la propriété que dansFoo
.Vous devez donc vous assurer qu'il est une méthode de lecture qui correspondent exactement le 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 non-void
. Si vous en avez un, et ça ne fonctionne toujours pas, alors les chances sont que vous était occupé de la modification de code en avant et en arrière sans fermement le nettoyage de la construire, de reconstruire le code et le redéploiement/redémarrage de l'application. Vous devez vous assurer que vous avez fait.Pour
boolean
(pasBoolean
!) propriétés, la méthode de lecture nom doit commencer paris
au lieu deget
.Quel que soit le type, la présence de la
foo
champ lui-même est donc pas pertinentes. Il peut avoir un nom différent, ou être complètement absent, ou même êtrestatic
. Tous ci-dessous doivent toujours être accessibles par${bean.foo}
.Vous le voyez, le champ n'est pas ce qui compte, mais la méthode de lecture lui-même. Notez que le nom de la propriété elle-même ne doit pas être capitalisés dans EL. En d'autres termes,
${bean.Foo}
ne sera plus jamais le travail, il devrait être${bean.foo}
.Voir aussi:
Je crois que l'id accesseurs ne correspondent pas à la fève des conventions de nommage, et c'est pourquoi l'exception est levée. Ils doivent être comme suit:
J'ai été confronté au même type de problème:
Extrait De Code :
<c:forEach items="${orderList}" var="xx">
${xx.id} <br>
</c:forEach>
Il y a un espace après orderlist comme ceci : "${orderList}"
en raison de laquelle le xx variable a été prise en coverted en Corde et n'a pas été en mesure d'appeler xx.id.
Assurez-vous donc sur l'espace. Ils jouent un rôle crucial parfois. :p