javax.el.PropertyNotFoundException: proprietà ‘foo’ non trovata sul tipo com.example.Bean

Ho dei risultati da

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

query e vorrei mostrarlo su JSP.

Ho il ciclo:

  

${pool.name}

e mi piacerebbe visualizzare i risultati dalla tabella poolQuestion (che è la tabella Join). Il valore che voglio mostrare è ‘risposta’.

Come posso farlo?

  

${pool.answer}

${pool.name}

Il codice sopra non funziona.

L’errore è:

  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)

Il modello è:

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

Il controller è:

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

E la vista è:

  

${pool.name}

PS. ${pool.name} viene visualizzato correttamente

    javax.el.PropertyNotFoundException: proprietà ‘foo’ non trovata sul tipo com.example.Bean

    Ciò significa letteralmente che la class menzionata com.example.Bean non ha un metodo getter pubblico (non statico!) Per la proprietà citata foo . Si noti che il campo stesso è irrilevante qui!

    Il nome del metodo getter pubblico deve iniziare con get , seguito dal nome della proprietà che è in maiuscolo solo nella prima lettera del nome della proprietà come in Foo .

     public Foo getFoo() { return foo; } 

    È quindi necessario assicurarsi che esista un metodo getter che corrisponda esattamente al nome della proprietà e che il metodo sia public ( non static ) e che il metodo non prenda alcun argomento e che non restituisca void . Se ne hai uno e ancora non funziona, è probabile che tu fossi impegnato a modificare il codice avanti e indietro senza pulire la build, ribuild il codice e ridistribuire / riavviare l’applicazione. Devi assicurarti di averlo fatto.

    Per le proprietà boolean (non Boolean !), Il nome del metodo getter deve iniziare con invece di get .

     public boolean isFoo() { return foo; } 

    Indipendentemente dal tipo, la presenza del campo foo non è quindi rilevante. Può avere un nome diverso, o essere completamente assente, o addirittura essere static . Tutti i seguenti dovrebbero essere ancora accessibili da ${bean.foo} .

     public Foo getFoo() { return bar; } 

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

     public Foo getFoo() { return FOO_CONSTANT; } 

    Vedete, il campo non è quello che conta, ma il metodo getter stesso. Si noti che il nome della proprietà stesso non deve essere in maiuscolo in EL. In altre parole, ${bean.Foo} non funzionerà mai, dovrebbe essere ${bean.foo} .

    Guarda anche:

    • javax.el.PropertyNotFoundException: proprietà ‘foo’ non leggibile sul tipo java.lang.Boolean
    • In che modo il linguaggio di espressione Java risolve gli attributi booleani? (in JSF 1.2)
    • Identificazione e risoluzione di javax.el.PropertyNotFoundException: target irraggiungibile
    • Il codice di Facelets sconnesso richiama ancora espressioni EL come # {bean.action ()} e causa javax.el.PropertyNotFoundException su # {bean.action}

    Credo che gli accessor id non corrispondano alle convenzioni di denominazione dei bean ed è per questo che viene lanciata l’eccezione. Dovrebbero essere come segue:

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

    EL interpreta ${class.name} come descritto – il nome diventa getName () sul presupposto che stai usando metodi espliciti o impliciti per generare getter / setter

    È ansible sovrascrivere questo comportamento identificando esplicitamente il nome come funzione: ${class.name()} Ciò chiama direttamente la funzione name () senza modifiche.

    Stavo affrontando il tipo di problema simile: Snippet di codice:

    ${xx.id}

    C’era uno spazio dopo l’ordine in questo modo: “$ {orderList}” a causa del quale la variabile xx si stava copiando in String e non era in grado di chiamare xx.id.

    Quindi assicurati dello spazio. A volte giocano un ruolo cruciale. : p