如何在JSTL代码中访问ng-repeat $ index变量?

时间:2015-09-29 15:52:02

标签: html angularjs jsp jstl el

我有一个使用ng-repeat的div块。在这个角度循环中,我需要在JSTL中有一个循环,但对于这个内循环,我将需要角循环的当前索引。

所以想象一下这是基本结构:

<div ng-repeat="foo in fooBarCtrl.blah | orderBy: '_order' track by $index">
    <c:forEach var="element" items="${JSTLarray[**NEED_ANGULAR_INDEX_HERE**]}">
        <c:out value="foobar" />
    </c:forEach>
</div>

由于角度和JSP的运行方式,我不确定它是否可以直接访问我的JSTL代码中的$ index变量。但是,我试图想一些其他解决方案来解决这个问题。

如何获取JSTL / EL父循环内角度循环的当前索引?

1 个答案:

答案 0 :(得分:0)

最好将JSTLArray序列化为JSON并以某种方式通过ng-init传递,并将迭代留给ng-repeat而不是c:forEach。混合这两个世界很难,因为一个是服务器端渲染,一个是客户端渲染,所以很明显你不能访问JSTL中的$index,因为只有在页面编译完成后才会被评估给客户。

过去我遇到这种限制的方法是拥有一个自定义的JSTL函数,例如${lib:toJSON(JSTLArray)},它将通过Jackson库将所述数组转换为JSON(或任何Java bean)。这样,现在您可以使用Angular渲染数组的内容。然后,我将在我的Angular控制器中创建一个“init”函数,并传入该JSON并对其执行任何操作。 init调用看起来像ng-init="fooBarCtrl.someInitFunction(${lib:toJSON(JSTLArray)})"

以下是我之前编写的toJson方法的代码片段。

`

import org.codehaus.jackson.map.ObjectMapper;

import java.io.IOException;

public class CustomFunctions {

    /**
     * Serializes a Java object to a Json string.
     *
     * @param object
     * @return
     */
    public static String toJson(Object object) {

        ObjectMapper mapper = new ObjectMapper();
        String json = "{}";
        try {
            json = mapper.writeValueAsString(object);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return json;
    }
}

`

希望这会有所帮助。