Getting equal symbol expected while using jstl

18,590

Solution 1

Try changing this:

items="${aggregatedBatchProgressMetrics["batchMetricsList"]}"

to this:

items="${aggregatedBatchProgressMetrics['batchMetricsList']}"

Solution 2

Replace

<c:forEach var="batchProgressMetrics" items="${aggregatedBatchProgressMetrics["batchMetricsList"]}"> 

by

<c:forEach var="batchProgressMetrics" items="${aggregatedBatchProgressMetrics['batchMetricsList']}">  

The doublequote was closing the items value too soon which resulted in invalid EL. You should have spotted this soon enough when using an editor with decent sytnax highlighting (like here on SO :) ).

Share:
18,590
Admin
Author by

Admin

Updated on July 28, 2022

Comments

  • Admin
    Admin almost 2 years

    I am getting

    org.apache.jasper.JasperException: /WEB-INF/AllClientBatchDetails.jsp(54,103) equal symbol expected

    And here is the jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*%>   
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>   
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>   
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>  
    
    
    <html:html xhtml="true">   
    <head>   
    <title><bean:message key="progressReporter.successpage.title"/></title>  
    <link rel="stylesheet" href="style.css">    
    <html:base/>   
    </head>   
    <body>  
     <c:choose>   
      <c:when test="${empty batchProgressMetricsList}">  
       <font color=<bean:message key="error.font.color" />   size=<bean:message key="error.font.size" />>  
         <bean:message key="error.no.active.batch" />  
       </font>  
       <br/>  
      </c:when>  
      <c:otherwise>  
       <h4><bean:message key="table.header" /></h4>  
       <table border=<bean:message key="table.border.size" />>  
        <tr>  
         <th><bean:message  key="table.client.id.header" /></th>  
         <th><bean:message key="table.total.session.used" /></th>  
         <th><bean:message key="table.total.time.elapsed" /></th>  
         <th><bean:message key="table.imnts.completed" /></th>  
         <th><bean:message key="table.imnts.remaining" /></th>  
         <th><bean:message key="table.cores.allocated" /></th>  
         <th><bean:message key="table.time.remaining" /></th>  
        </tr>  
        <c:forEach var="aggregatedBatchProgressMetrics" items="${batchProgressMetricsList}">  
         <tr>  
          <td class="tdcenter">${aggregatedBatchProgressMetrics["clientId"]}</td>        
          <td class="tdcenter">${fn:substringBefore(aggregatedBatchProgressMetrics["sessionStats"]["sessionUsedTime"]/60000, '.')}mins${fn:substringBefore((aggregatedBatchProgressMetrics["sessionStats"]["sessionUsedTime"] % 60000)/1000, '.')}secs </td>  
          <td class="tdcenter">${fn:substringBefore(aggregatedBatchProgressMetrics["sessionStats"]["totalElapsedTime"]/60000, '.')}mins${fn:substringBefore((aggregatedBatchProgressMetrics["sessionStats"]["totalElapsedTime"] % 60000)/1000, '.')}secs</td>  
          <td class="tdcenter">${aggregatedBatchProgressMetrics["instrumentStats"]["totalImntsCompleted"]}</td>  
          <td class="tdcenter">${aggregatedBatchProgressMetrics["instrumentStats"]["totalImntsRemaining"]}</td>  
          <td class="tdcenter">${aggregatedBatchProgressMetrics["numberOfCores"]}</td>  
          <td class="tdcenter">${fn:substringBefore(aggregatedBatchProgressMetrics["sessionStats"]["sessionRemainingTime"]/60000, '.')}mins${fn:substringBefore((aggregatedBatchProgressMetrics["sessionStats"]["sessionRemainingTime"] % 60000)/1000, '.')}secs</td>  
          <br/>  
           <table>  
            <tr>  
             <th>session Id</th>  
             <th>taskId</th>  
             <th>task start time</th>  
             <th>task end time</th>  
            </tr>        
            ${aggregatedBatchProgressMetrics["batchMetricsList"][0]}  
            ${aggregatedBatchProgressMetrics["batchMetricsList"][1]}  
            ${aggregatedBatchProgressMetrics["batchMetricsList"][2]}  
    
            <c:forEach var="batchProgressMetrics" items="${aggregatedBatchProgressMetrics["batchMetricsList"]}">  
             <tr>  
              <td class="tdcenter">${batchProgressMetrics["taskStats"]["sessionId"]}</td>  
              <td class="tdcenter">${batchProgressMetrics["taskStats"]["taskId"]}</td>  
              <td class="tdcenter">${batchProgressMetrics["taskStats"]["taskStartTime"]}</td>  
              <td class="tdcenter">${batchProgressMetrics["taskStats"]["taskEndTime"]}</td>  
             </tr>  
            </c:forEach>          
           </table>  
          <br/>  
         </tr>  
        </c:forEach>  
       </table>  
      </c:otherwise>  
     </c:choose>  
    <html:link page="/ProgressReporterForm.jsp">Go Back</html:link>   
    </body>   
    </html:html> 
    

    I have request attribute set to batchProgressMetricsList and its an array list of an object called. I have AggregatedBatchProgressMetrics. Inside aggregatedBatchProgressMetrics i have a method called getBatchMetricsList which return an arraylist of object called BatchProgressMetrics. If i run it without the nested c:forEach tag, it would just run fine, but if i include the nested one it just fails. Can somebody please help me?

    Thanks in advance. Almas

  • Advaita Gosvami
    Advaita Gosvami over 9 years
    @Almas than why is this not marked as an answer? It would be nice.