Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

javax.el.PropertyNotFoundException: Property 'foo' not found on type com.example.Bean

I have results from

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

query and I would like to display it on JSP.

I have loop:

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

and I would like to display results from poolQuestion table (which is Join table). The value that i want to display is 'answer'.

How can I do it?

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

The above code doesn't works.

The error is:

  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) 

The model is:

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(); 

The controller is:

List<Pool> pool = poolService.getAll();  model.addAttribute("pools", pool); 

And the View is:

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

PS. the ${pool.name} is displayed properly

like image 357
Ilkar Avatar asked Dec 20 '11 15:12

Ilkar


2 Answers

javax.el.PropertyNotFoundException: Property 'foo' not found on type com.example.Bean

This literally means that the mentioned class com.example.Bean doesn't have a public (non-static!) getter method for the mentioned property foo. Note that the field itself is irrelevant here!

The public getter method name must start with get, followed by the property name which is capitalized at only the first letter of the property name as in Foo.

public Foo getFoo() {     return foo; } 

You thus need to make sure that there is a getter method matching exactly the property name, and that the method is public (non-static) and that the method does not take any arguments and that it returns non-void. If you have one and it still doesn't work, then chances are that you were busy editing code forth and back without firmly cleaning the build, rebuilding the code and redeploying/restarting the application. You need to make sure that you have done so.

For boolean (not Boolean!) properties, the getter method name must start with is instead of get.

public boolean isFoo() {     return foo; } 

Regardless of the type, the presence of the foo field itself is thus not relevant. It can have a different name, or be completely absent, or even be static. All of below should still be accessible by ${bean.foo}.

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

You see, the field is not what counts, but the getter method itself. Note that the property name itself should not be capitalized in EL. In other words, ${bean.Foo} won't ever work, it should be ${bean.foo}.

See also:

  • javax.el.PropertyNotFoundException: Property 'foo' not readable on type java.lang.Boolean
  • How does Java expression language resolve boolean attributes? (in JSF 1.2)
  • Identifying and solving javax.el.PropertyNotFoundException: Target Unreachable
  • Outcommented Facelets code still invokes EL expressions like #{bean.action()} and causes javax.el.PropertyNotFoundException on #{bean.action}
like image 168
BalusC Avatar answered Oct 16 '22 16:10

BalusC


I believe the id accessors don't match the bean naming conventions and that's why the exception is thrown. They should be as follows:

public Integer getId() { return id; }     public void setId(Integer i){ id= i; } 
like image 23
Fakher Avatar answered Oct 16 '22 17:10

Fakher