我有以下结果
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.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)
该模型是:
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。在${pool.name}显示正常
${pool.name}
javax.el.PropertyNotFoundException:在类型com.example.Bean上找不到属性’foo’
从字面上看,这意味着所提到的类com.example.Bean没有针对所提到的property的公共(非静态!)getter方法foo。请注意,此处的字段本身无关紧要!
com.example.Bean
foo
公共获取方法的名称必须以开头get,然后是属性名称,该属性名称仅在属性名称的第一个字母处大写,例如Foo。
get
Foo
public Foo getFoo() { return foo; }
因此,你需要确保有一个getter方法精确匹配属性名称,并且该方法是public( 非 - static),并且该方法不带任何参数,它返回非void。如果您只有一个,但仍然无法正常工作,则很可能是您忙于来回编辑代码,而没有牢固地清理构建,重新构建代码以及重新部署/重新启动应用程序。您需要确保已这样做。
public
static
void
对于boolean(不是Boolean!)属性,getter方法名称必须以开头,is而不是get。
boolean
Boolean
is
public boolean isFoo() { return foo; }
因此,无论类型如何,foo字段本身的存在 都不 重要。它可以具有不同的名称,也可以完全不存在,甚至可以是static。以下所有内容仍应可通过访问${bean.foo}。
${bean.foo}
public Foo getFoo() { return bar; } public Foo getFoo() { return new Foo("foo"); } public Foo getFoo() { return FOO_CONSTANT; }
您会看到,该字段不是重要的,而是getter方法本身。请注意,属性名称本身不应在EL中大写。换句话说,${bean.Foo}它将永远不会起作用${bean.foo}。
${bean.Foo}