我可以在javascript中使用带有foreach标记的JSTL选择标记吗?

时间:2013-10-31 09:45:45

标签: foreach jstl

我想在javascript中使用JSTL库。

我的代码如下。

<script type="text/javascript">
var grid_data = 
[
<c:forEach items="${LIST}" var="list" varStatus="status">               
<c:if test="${ status.index == 0 }">
{id:'${list.NOTICE_ID}'}
</c:if>
</c:forEach>
];
</script>

此代码运行良好,但它不适用于选择标记 有什么特别的理由吗?有人能帮助我吗?

// Syntax error on tokens ** especially in script not in html body **
<script type="text/javascript">
var grid_data = 
[ 
<c:forEach items="${LIST}" var="list" varStatus="status">               
<c:choose>
<c:when test="${ status.index == 0 }">
{id:'${list.NOTICE_ID}'}
</c:when>
<c:otherwise>
,    {id:'${list.NOTICE_ID}'}
</c:otherwise>
</c:choose>
</c:forEach>
]
</script>

enter image description here

3 个答案:

答案 0 :(得分:2)

这些是Eclipse发出的错误信号,因为Eclipse在与JSP代码混合时无法正确验证JavaScript代码语法。

部署JSP,运行它,看看它在执行时是否真的有效。它可能运行正常。

答案 1 :(得分:0)

无法帮助您选择标记 - 此当前代码段无法正常工作(缺少结束标记)。如jstl foreach omit an element in last record

中所述,在列表的每个但最后一个元素之后添加逗号怎么样?

答案 2 :(得分:0)

以下方法可能有助于避免eclipse中的丑陋错误:

  1. 设置如下所示的变量:

    <c:set var="newVariable">
    {
    <c:forEach var="entry" items="${variableFromServerAsMap}" varStatus="status">
        "<c:out value='${entry.key}'/>" : "<c:out value='${entry.value}'/>}"<c:if test="${not status.last}">,</c:if>
    </c:forEach>
    };
    

  2. 并在javascript部分中使用newVariable变量,如下所示:

    <script type="text/javascript">
        var my_js_data = <c:out value="${newVariable}" escapeXml="false"/>
    </script>
    
  3. 输出应类似于以下内容:

    <script type="text/javascript">
        var my_js_data = {
    
                "some_param_key" : "some_param_value",
                "some_param_key_2" : "some_param_value_2",
    
        };
    </script>