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
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:
- javax.El.PropertyNotFoundException: propriété 'foo' non lisible sur type Java.lang.Booléen
- comment le langage D'expression Java résout-il les attributs booléens? (dans le JSF 1.2)
- identifier et résoudre javax.El.PropertyNotFoundException: Cible Inaccessible
- le code des Facelets est encore utilisé pour les expressions EL comme # {bean.action()} et les causes javax.El.PropertyNotFoundException sur # {bean.action}
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; }
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.
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.
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