我有一个使用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父循环内角度循环的当前索引?
答案 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;
}
}
`
希望这会有所帮助。