【问题标题】:To display a query result having join using JSTL in JSP在 JSP 中使用 JSTL 显示具有连接的查询结果
【发布时间】:2015-04-04 22:45:30
【问题描述】:

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

【问题讨论】:

    标签: mysql eclipse apache jsp jstl


    【解决方案1】:

    您不能在&lt;c:forEach&gt; 标记的varattribute 中定义多个变量。您也不能使用 SQL 语法 &lt;table-alias&gt;.&lt;column-name&gt; 来引用 EL 表达式中的结果集属性。

    你的&lt;c:forEach&gt; JSP 块应该是这样的

    <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 来指向结果集中的一行,因为您在循环中对其进行迭代。并且,${EL} 表达式中的语法 &lt;varName&gt;.&lt;columnAlias&gt; 用于提取结果集的列值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多