在练习JSTL核心库标签的时候老是出错,大侠们帮忙看下:
说下代码意思:我在Action.JAVA里传了一个userlist(request.setAttribute("userlist", userList);)到JSP中;里面有10个user object.
下面就是JSP:(主要代码)实现功能:表单数据能隔行能以不同颜色显示      <table border="1">
           <c:forEach var="use" items="${userlist}" varStatus="vs">
<c:choose>
<c:when test="${empty userlist}">
<tr><td colspan="3">没有符合要求的数据</td></tr>
</c:when>
<c:otherwise>
<c:when test="${vs.count % 2 == 0}">
<tr bgcolor="red">
<td>${use.name }</td>
<td>${use.age }</td>
<td>${use.group.name }</td>
</tr>
</c:when>
<c:otherwise>
<tr>
<td>${use.name }</td>
<td>${use.age }</td>
<td>${use.group.name }</td>
</tr>
</c:otherwise>
</c:otherwise>
</c:choose>
</c:forEach>
</table>浏览器报错:
org.apache.jasper.JasperException: Exception in JSP: /jstl_core.jsp:8178:  <tr><td colspan="3">没有符合要求的数据</td></tr>
79:  </c:when>
80:  <c:otherwise>
81:  <c:when test="${vs.count % 2 == 0}">
82:  <tr bgcolor="red">
83:  <td>${use.name }</td>
84:  <td>${use.age }</td>起 因 javax.servlet.ServletException: Illegal use of &lt;when&gt;-style tag without &lt;choose&gt; as its direct parent
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
org.apache.jsp.jstl_005fcore_jsp._jspService(jstl_005fcore_jsp.java:226)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)服务器:tomcat
报错信息和上面一样。
服务器重启过也不行

解决方案 »

  1.   

    JSTL语言表达使用错误! 
      

  2.   

     <c:when test="${vs.count % 2 == 0}">
                            <tr bgcolor="red">
                                <td>${use.name }</td>
                                <td>${use.age }</td>
                                <td>${use.group.name }</td>
                            </tr>
                        </c:when>

     这个外面还必须有<c:choose>
      

  3.   

    应该是这个必须用<c:choose> </c:choose> !
    <c:when test="${vs.count % 2 == 0}">
                            <tr bgcolor="red">
                                <td>${use.name }</td>
                                <td>${use.age }</td>
                                <td>${use.group.name }</td>
                            </tr>
                        </c:when>
                        <c:otherwise>
                            <tr>
                                <td>${use.name }</td>
                                <td>${use.age }</td>
                                <td>${use.group.name }</td>
                            </tr>                            
                        </c:otherwise>       
      

  4.   

    只要见<c:when></c:when> 都必须包在<c:choose></c:choose>  里面! 
      

  5.   

    jstl的中的循环标签中不能使用判断标签的 虽然能实现其效果,但是还是会报错的用Struts1的<logic:iterate>标签的 index 属相吧
    struts2的<s:iterator >标签吧!~~~~~~~