javax.el.PropertyNotFoundException: la propiedad ‘foo’ no se encuentra en el tipo com.example.Bean

Tengo resultados de

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

consulta y me gustaría mostrarlo en JSP.

Tengo un bucle

  

${pool.name}

y me gustaría mostrar los resultados de la tabla poolQuestion (que es la tabla de unión). El valor que quiero mostrar es ‘respuesta’.

¿Cómo puedo hacerlo?

  

${pool.answer}

${pool.name}

El código anterior no funciona.

El error es:

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

${pool.name}

21: 22: 23: 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)

El modelo es:

 public List getAll(){ Session session = sessionFactory.getCurrentSession(); Query query = session.createQuery("From Pool as p left join fetch p.poolQuestions as s"); return query.list(); 

El controlador es:

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

Y la vista es:

  

${pool.name}

PD. el ${pool.name} se muestra correctamente

javax.el.PropertyNotFoundException: la propiedad ‘foo’ no se encuentra en el tipo com.example.Bean

Esto significa literalmente que la clase mencionada com.example.Bean no tiene un método getter público (¡no estático!) Para la propiedad mencionada foo . Tenga en cuenta que el campo en sí es irrelevante aquí!

El nombre del método getter público debe comenzar con get , seguido por el nombre de la propiedad que está en mayúscula solo en la primera letra del nombre de la propiedad como en Foo .

 public Foo getFoo() { return foo; } 

Por lo tanto, debe asegurarse de que exista un método getter que coincida exactamente con el nombre de la propiedad, y que el método sea public ( no static ) y que el método no tome ningún argumento y que devuelva el carácter no void . Si tiene uno y aún así no funciona, es probable que haya estado ocupado editando y editando código sin haber limpiado la comstackción, reconstruido el código y vuelto a implementar / reiniciando la aplicación. Debes asegurarte de haberlo hecho.

Para Boolean propiedades boolean (¡no Boolean !), El nombre del método getter debe comenzar con is lugar de get .

 public boolean isFoo() { return foo; } 

Independientemente del tipo, la presencia del campo foono es relevante. Puede tener un nombre diferente, o estar completamente ausente, o incluso ser static . Todo lo de abajo debe ser accesible por ${bean.foo} .

 public Foo getFoo() { return bar; } 

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

 public Foo getFoo() { return FOO_CONSTANT; } 

Usted ve, el campo no es lo que cuenta, sino el método getter en sí mismo. Tenga en cuenta que el nombre de la propiedad en sí no debe estar en mayúscula en EL. En otras palabras, ${bean.Foo} nunca funcionará, debería ser ${bean.foo} .

Ver también:

  • javax.el.PropertyNotFoundException: la propiedad ‘foo’ no es legible en el tipo java.lang.Boolean
  • ¿Cómo resuelve el lenguaje de expresiones Java los atributos booleanos? (en JSF 1.2)
  • Identificar y resolver javax.el.PropertyNotFoundException: destino inalcanzable
  • El código Facelets Outcommented todavía invoca expresiones EL como # {bean.action ()} y causa javax.el.PropertyNotFoundException en # {bean.action}

Creo que los accesadores de id no coinciden con las convenciones de nomenclatura de beans y es por eso que se lanza la excepción. Deberían ser los siguientes:

 public Integer getId() { return id; } public void setId(Integer i){ id= i; } 

EL interpreta ${class.name} como se describe – el nombre se convierte en getName () suponiendo que está utilizando métodos explícitos o implícitos para generar getter / setters

Puede anular este comportamiento identificando explícitamente el nombre como una función: ${class.name()} Esto llama al nombre de la función () directamente sin modificación.

Estaba enfrentando el tipo similar de problema: Fragmento de código:

${xx.id}

Hubo un espacio después de una lista de pedidos como esta: “$ {listaDePedidos}” debido a que la variable xx se estaba convirtiendo en cadena y no fue posible llamar a xx.id.

Así que asegúrate de espacio. Ellos juegan un papel crucial a veces. :pag