класса 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-->.
Читайте также:
- javax.Эль.PropertyNotFoundException: свойство " foo " не читается по типу Ява.ленг.Boolean
- как язык выражений Java разрешает логические атрибуты? (в JSF 1.2)
- идентификация и решение javax.Эль.PropertyNotFoundException: Цель Недостижима
- Outcommented Facelets код по-прежнему вызывает El выражения, такие как #{bean.действие ()} и вызывает javax.Эль.PropertyNotFoundException на #{bean.действие}
Я считаю, что методы доступа 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