org.apache.jasper.JasperException: Exception in JSP: /game.jsp:3532:   <logic:notEmpty name="list">
33:   <logic:iterate id="alist"  name="list">
34:   <tr>
35:   <td>${alist.title }</td>
36:   <td>${alist.username }</td>
37:   <td>${alist.apperDate }</td>
38:   </logic:iterate>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.cui.filter.LanguageFilter.doFilter(LanguageFilter.java:26)
root cause javax.servlet.ServletException: The "." operator was supplied with an index value of type "java.lang.String" to be applied to a List or array, but that value cannot be converted to an integer.
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
org.apache.jsp.game_jsp._jspService(game_jsp.java:214)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.cui.filter.LanguageFilter.doFilter(LanguageFilter.java:26)
root cause javax.servlet.jsp.el.ELException: The "." operator was supplied with an index value of type "java.lang.String" to be applied to a List or array, but that value cannot be converted to an integer.
org.apache.commons.el.Logger.logError(Logger.java:481)
org.apache.commons.el.Logger.logError(Logger.java:498)
org.apache.commons.el.Logger.logError(Logger.java:566)
org.apache.commons.el.ArraySuffix.evaluate(ArraySuffix.java:227)
org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:263)
org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:190)
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:924)
org.apache.jsp.game_jsp._jspService(game_jsp.java:134)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.cui.filter.LanguageFilter.doFilter(LanguageFilter.java:26)这是什么意思,好象是说我标签用错了?没错啊,在这以前我也是这么用的,为什么到这个页面时,报错呢.<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html locale="true">
  <head>
    <html:base />
    
    <title>游戏|天堂</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->  </head>
  
  <body>
  <a href="apper.jsp">发表新主题</a>
   <%--  遍历数据  --%>
  <table border="1">
  <tr>
  <th>主题</th><th>作者</th><th>发表时间</th>
  <logic:notEmpty name="list">
  <logic:iterate id="alist"  name="list">
  <tr>
  <td>${alist.title }</td>
  <td>${alist.username }</td>
  <td>${alist.apperDate }</td>
  </logic:iterate>
  </logic:notEmpty>
  </table>
  <br>
   <%--  分页  --%>
   <center> <a href="page.do?pageNo=1&schema=Article">第一页</a>|
     <a href="page.do?pageNo=${requestScope.pageNo-1}&schema=Article">上一页</a>|
     <a href="page.do?pageNo=${requestScope.pageNo+1 }&schema=Article">下一页</a>|
     <a href="page.do?pageNo=${requestScope.totalPage}&schema=Article">最后一页</a>
     <form action="page.do">
     <input type="text" name="pageNo" value="${requestScope.pageNo }">
      <input type="hidden" name="schema" value="Article" /> 
     <input type="submit" value="go">
     </form>共${requestScope.totalPage }页
     
    </center>
  
  </body>
</html:html>
上面这个是jsp文件,由action类跳转到此页面,对结果进行分页
action类可以运行完,到这就出错了,这个分页的list是我在action类做了个连接查询得到的,以前对单独一个表查询不出错,
做了个连接查询就报错了,还报的是EL异常,我实在找不到有什么不对的地方啊,郁闷死拉.

解决方案 »

  1.   

    <%@ page isELIgnored="false">加这个试试. 
      

  2.   

    先换成<%=   %>
    看看是否能取出值。
      

  3.   

    能取出整个list来,因为我使用的是连接查询,返回的是两张表的数据的集合.(表user和article)
    假设这样写:(没有对list循环,为了省时)
    <% List list=(List)request.getAttribute("list");
       list.get(0);
     %>
    那这个时候返回的对象是什么类型呢?user 或者article或者??
    如果这样做循环的话我怎么取出他们的属性值呢?
      

  4.   


    你返回的是一个Object 数组。
    所以 ${alist.title } 这样的写法行不通。
    改进方案
    1,不改数据查询的情况下。在页面上 二次 循环。
    2,将连接查询的结果集重新封装成一个对象。
      

  5.   

    怎么重新封装啊?我不太会啊,object对象的话,原先的user和article属性都没有了,我要怎么封装才能把这两个类里的属性都拿到呢?
      

  6.   

    如果是hibernate 的话给你一条参考的 hql  
    假设 有 表 T1 ,T2 表T2中有 关联到T1 t1(id主键)的外键 t2_id 。 取 连接后的 T1,T2中的一些字段封装成一个实体类。并有一个默认构造方法和一个包含 你取出的所有字段的一个构造方法。Temp 类。
    hql= "select new Temp(t1.a,t1.b...,t2.x,t2.y...) from T1 t1 ,T2 t2 where t1.id=t2.t2_id"如果是jdbc就循环出来一个个给就是啦。