做了个简单的EL表达式的foreach的例子,为什么会出现这样的报错,怎么解决
2011-5-27 14:31:19 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.el.ELException: Unable to find a value for "listTitles" in object of class "com.hlx.dao.TitlesDao" using operator "."
at org.apache.commons.el.Logger.logError(Logger.java:481)
at org.apache.commons.el.Logger.logError(Logger.java:498)
at org.apache.commons.el.Logger.logError(Logger.java:611)
at org.apache.commons.el.ArraySuffix.evaluate(ArraySuffix.java:340)
at org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
at org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:263)
at org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:190)
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:929)
at org.apache.jsp.MyJsp_jsp._jspx_meth_c_005fset_005f0(MyJsp_jsp.java:109)
at org.apache.jsp.MyJsp_jsp._jspService(MyJsp_jsp.java:79)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)

解决方案 »

  1.   

    代码,如下
    <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@page import="com.hlx.dao.TitlesDao" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>    
        <title>My JSP 'MyJsp.jsp' starting page</title>
        <jsp:useBean id="titles" class="com.hlx.dao.TitlesDao"/>
      </head>
      
      <body>
        
        <c:set var="bookTitles" value="${titles.listTitles}" scope="session" />
        <c:forEach var="title" items="${sessionScope.bookTitles}" > 
          a${title.title}, ${title.isbn}<br/>
        </c:forEach>
      </body>
    </html>
      

  2.   

    我不知道你为什么这么写,你可以在action中把你存入的list放进session中
    action:
     request.getSession().setAttribute('listTitle',titleList);
    jsp:
    <c:forEach var="title" items="${sessionScope.listTitle}" >  
      a${title.title}, ${title.isbn}<br/>
      </c:forEach>
      

  3.   

    直接<c:forEach var="title" items="${bookTitles}" >  
      

  4.   

    四楼的应该没问题,<c:set/>可以给变量设对象吗?很疑问!!
      

  5.   

     <c:set var="bookTitles" value="${titles.listTitles}" scope="session" />
    在这里出错,它的错误意思是说:无法找到titles在com.hlx.dao.TitlesDao中的对象使用operators操作符!
      

  6.   

    你看下com.hlx.dao.TitlesDao类中有listTitles这个集合吗?
      

  7.   

     <c:set var="bookTitles" value="${titles.listTitles}" scope="session" />
    这句错了。titles不是EL中可用的,应该是requestScope 或者sessinScope等等  
    所以才报找不到listTitles,用titles怎么取得出来值你存在哪个范围的就用相关的操作取值
      

  8.   

    listTitles 找不到这个 估计你没接受到值