我在显示查询结果时遇到问题,因为它包含 JOINS。
<sql:query var="ApplicationDetails" dataSource="${myDS}">
SELECT a.idApplication idApplication,a.ConfigID ConfigId,a.App_Origin App_Origin,a.ApplicationName ApplicationName, a.Description Description,b.ownername businessOwner,d.ownername TechnicalOwner, e.ownername DomainOwner
FROM application a, owner b, owner d, owner e
where a.idbusinessowner=b.idowner
and a.idtechnicalowner=d.idowner
and a.iddomainowner=e.idowner
and a.ApplicationName='<%=request.getParameter("AppName")%>';
</sql:query>
我需要显示应用程序详细信息以及从同一个表“所有者”中提取的应用程序的业务、域和技术所有者,因此,我使用了三次联接。 以下是我的 JSTL 代码
<c:forEach var="application a, owner b, owner d, owner e" items="${ApplicationDetails.rows}">
Application Name : <c:out value="${ApplicationDetails.a.ApplicationName}"/>
<br>Application id: <c:out value="${ApplicationDetails.a.idApplication}"/>
<br>Config ID: <c:out value="${ApplicationDetails.a.ConfigID}"/>
<br>VHA Origin: <c:out value="${ApplicationDetails.a.App_Origin}"/>
<br>Description: <p><c:out value="${ApplicationDetails.a.Description}"/>
<br>Owners<br>
<table>
<tr><td>Domain owner</td>
<td><c:out value="${ApplicationDetails.e.ownername}"/></td></tr>
<tr><td>Business owner</td>
<td><c:out value="${ApplicationDetails.b.ownername}"/></td></tr>
<tr><td>Technical owner</td>
<td><c:out value="${ApplicationDetails.d.ownername}"/></td></tr>
</table>
</c:forEach>
当我在 Eclipse 中运行上述代码时,我在控制台中收到以下错误
HTTP 状态 500 - 在第 29 行处理 JSP 页面/DisplayApplicationDetails.jsp 时发生异常
根本原因
javax.el.PropertyNotFoundException: Property 'a' not found on type org.apache.taglibs.standard.tag.common.sql.ResultImpl
javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:214)
javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:191)
javax.el.BeanELResolver.property(BeanELResolver.java:300)
javax.el.BeanELResolver.getValue(BeanELResolver.java:81)
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
org.apache.el.parser.AstValue.getValue(AstValue.java:123)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:182)
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:919)
org.apache.jsp.DisplayApplicationDetails_jsp._jspx_meth_c_005fout_005f0(DisplayApplicationDetails_jsp.java:269)
org.apache.jsp.DisplayApplicationDetails_jsp._jspx_meth_c_005fforEach_005f0(DisplayApplicationDetails_jsp.java:198)
org.apache.jsp.DisplayApplicationDetails_jsp._jspService(DisplayApplicationDetails_jsp.java:133)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.43 logs.
最佳答案
您不能在 var
中定义多个变量<c:forEach>
的属性标签。您也不能使用 SQL 语法 <table-alias>.<column-name>
在 EL 表达式中引用结果集属性。
您的<c:forEach>
JSP block 应该像
<c:forEach var="AppRow" items="${ApplicationDetails.rows}">
Application Name : <c:out value="${AppRow.ApplicationName}"/>
<br>Application id: <c:out value="${AppRow.idApplication}"/>
<br>Config ID: <c:out value="${AppRow.ConfigID}"/>
<br>VHA Origin: <c:out value="${AppRow.App_Origin}"/>
<br>Description: <p><c:out value="${AppRow.Description}"/>
<br>Owners<br>
<table>
<tr><td>Domain owner</td>
<td><c:out value="${AppRow.DomainOwner}"/></td></tr>
<tr><td>Business owner</td>
<td><c:out value="${AppRow.businessOwner}"/></td></tr>
<tr><td>Technical owner</td>
<td><c:out value="${AppRow.TechnicalOwner}"/></td></tr>
</table>
</c:forEach>
注意,var
如何属性仅使用一个变量名 AppRow
当您在循环中迭代结果集中的行时,指向该行。并且,语法 <varName>.<columnAlias>
在 ${EL}
用于提取结果集的列值的表达式。
关于mysql - 在JSP中使用JSTL显示具有连接的查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28337867/