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