mysql - 在JSP中使用JSTL显示具有连接的查询结果

标签 mysql eclipse apache jsp jstl

我在显示查询结果时遇到问题,因为它包含 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/

相关文章:

php - Mysql - 在重复键上插入不同的值

MySQL 查询,无法弄清楚如何获取正确的数据

java - 碰撞检测在 2d android 中不起作用

eclipse - 如何修复 "Compilation unit name must end with .java, or one of the registered Java-like extensions"?

java - 如何在 Java/Android 中去掉字符串的结尾?

apache - Tomcat Apache 端口 80 端口 8080

apache - 如何在 Xampp 上为 Laravel 启用虚拟主机?

java - 准备语句: getIngredientByName

Mysql 安装程序显示错误 : Memoy could not be written

Apache 加载 mod_ssl 但在我的虚拟主机中忽略了 <IfModule mod_ssl.c>