在使用jstl时获得相同的符号

时间:2010-12-08 12:58:54

标签: java jsp jstl el

我正在

  

org.apache.jasper.JasperException:/ WEB-INF/AllClientBatchDetails.jsp(54,103)等号预期

这是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> 

我将请求属性设置为batchProgressMetricsList,并将其命名为对象的数组列表。我有AggregatedBatchProgressMetrics。在aggregatedBatchProgressMetrics内部,我有一个名为getBatchMetricsList的方法,它返回一个名为BatchProgressMetrics的对象的arraylist。如果我在没有嵌套c:forEach标签的情况下运行它,它就会运行正常,但是如果我包含嵌套的那个它就会失败。有人可以帮帮我吗?

提前致谢。 阿尔马斯

2 个答案:

答案 0 :(得分:13)

尝试更改此内容:

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

到此:

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

答案 1 :(得分:6)

替换

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

通过

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

doublequote过早关闭了items值,导致EL无效。你应该在使用具有体面sytnax突出显示功能的编辑器时很快发现这一点(比如这里的SO :)。