結果があります
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テーブル)からの結果を表示したいと思います。表示したい値は「answer」です。
どうすればいいですか?
<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}
は正しく表示されます
javax.el.PropertyNotFoundException:com.example.Bean型でプロパティ 'foo'が見つかりません
これは文字通り、前述のクラスcom.example.Bean
には、前述のプロパティfoo
のパブリック(非静的!)ゲッターメソッドがありません。ここでフィールド自体は無関係であることに注意してください!
パブリックゲッターメソッド名は、get
で始まり、その後にプロパティ名が続く必要があります。プロパティ名は、Foo
のようにプロパティ名の最初の文字でのみ大文字になります。
public Foo getFoo() {
return foo;
}
したがって、プロパティ名と正確に一致するゲッターメソッドがあり、メソッドがpublic
(non-であることを確認する必要があります。 static
)およびメソッドが引数を取らず、_void
以外を返すこと。持っていて、それでも機能しない場合は、ビルドをしっかりとクリーンアップせずにコードを前後に編集し、コードを再構築し、アプリケーションを再デプロイ/再起動するのに忙しかった可能性があります。あなたはそうしたことを確認する必要があります。
boolean
(Boolean
!ではない)プロパティの場合、ゲッターメソッド名はis
ではなくget
で始まる必要があります。
public boolean isFoo() {
return foo;
}
したがって、タイプに関係なく、foo
フィールド自体の存在はnotに関連します。別の名前にすることも、完全に省略することも、static
にすることもできます。以下はすべて、${bean.foo}
。
public Foo getFoo() {
return bar;
}
public Foo getFoo() {
return new Foo("foo");
}
public Foo getFoo() {
return FOO_CONSTANT;
}
ご存知のように、フィールドは重要なものではなく、ゲッターメソッドそのものです。プロパティ名自体はELで大文字にしないでください。言い換えると、 ${bean.Foo}
は機能しません。${bean.foo}
。
IdアクセサーはBeanの命名規則と一致しないと考えているため、例外がスローされます。次のようになります。
public Integer getId() { return id; }
public void setId(Integer i){ id= i; }
ELは_${class.name}
_を説明どおりに解釈します-getter/setterを生成する明示的または暗黙的なメソッドを使用していると仮定して、名前はgetName()になります
名前を関数として明示的に識別することにより、この動作をオーバーライドできます。${class.name()}
これは、変更せずに関数name()を直接呼び出します。