класса javax.Эль.PropertyNotFoundException: свойство " foo " не найдено на типе com.образец.Фасоль

у меня есть результаты из

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

запрос, и я хотел бы отобразить его на JSP.

у меня есть петля:

<c:forEach items="${pools}" var="pool"> 

    <p>${pool.name}</p>

</c:forEach>

и я хотел бы отобразить результаты из таблицы poolQuestion (которая является таблицей Join). Значение, которое я хочу отобразить, - это "ответ".

как я могу это сделать?

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

приведенный выше код не работает.

ошибка:

  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)

модель:

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

контроллер есть:

List<Pool> pool = poolService.getAll();

model.addAttribute("pools", pool);

вид:

<c:forEach items="${pools}" var="pool"> 

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

</c:forEach>

PS. the ${pool.name} правильно отображается

5 ответов


javax.Эль.PropertyNotFoundException: свойство " foo " не найдено на типе com.образец.В зернах

это буквально означает, что упомянутые класс com.example.Bean нет (нестатические!) метод getter для указанного свойства foo. Обратите внимание, что само поле здесь не имеет значения!

имя метода чтения должен начинаться с get, за которым следует имя свойства, которое капитализируется только в первой букве имени свойства как в Foo.

public Foo getFoo() {
    return foo;
}

таким образом, вам нужно убедиться, что существует метод getter, соответствующий точно имени свойства, и что метод public ( non-static) и, что метод не принимает никаких аргументов и возвращает не-void. Если у вас есть один, и он все еще не работает, то есть вероятность, что вы были заняты редактированием кода вперед и назад без твердой очистки сборки, перестройки кода и повторного развертывания/перезапуска приложения. Вы нужно убедиться, что вы это сделали.

на boolean (не Boolean!) свойства, имя метода getter должно начинаться с is вместо get.

public boolean isFoo() {
    return foo;
}

независимо от типа, наличие foo само поле таково не соответствующие. Он может иметь другое название, или полностью отсутствовать, или даже быть static. Все нижеследующее по-прежнему должно быть доступно ${bean.foo}.

public Foo getFoo() {
    return bar;
}

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

public Foo getFoo() {
    return FOO_CONSTANT;
}

видите ли, поле-это не то, что имеет значение, а сам метод геттера. Обратите внимание, что само имя свойства не должно быть капитализировано в EL. Другими словами,${bean.Foo} никогда не работал, он должен быть!--18-->.

Читайте также:


Я считаю, что методы доступа id не соответствуют соглашениям об именах компонентов, и поэтому возникает исключение. Они должны быть следующими:

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

EL интерпретирует ${class.name} как описано-имя становится getName () в предположении, что вы используете явные или неявные методы генерации getter/setters

Вы можете переопределить это поведение путем явного указания имени функции: ${class.name()} это вызывает имя функции () непосредственно без изменений.


Я получаю ту же ошибку на моем JSP, и плохой номинальный ответ был правильным

У меня была следующая строка:

и получаем следующую ошибку:

javax.Эль.PropertyNotFoundException: свойство "агент" не найдено по типу Ява.ленг.Строка

удаление пространства перед ${userList} решило мою проблему

Если некоторые есть такая же проблема, он быстро найдет этот пост и не тратит 3 дня в googeling, чтобы найти помощь.


я столкнулся с аналогичным типом проблемы: Фрагмент Кода:

<c:forEach items="${orderList}" var="xx"> ${xx.id} <br>
</c:forEach>

после orderlist был пробел: "${orderList} " из-за чего переменная xx была скрыта в строку и не смогла вызвать xx.id.

поэтому убедитесь в пространстве. Иногда они играют решающую роль. : p