Html 如何在JSTL代码中访问ng repeat$index变量?
我有一个div块,它使用ng repeat。在这个角度循环中,我需要JSTL中有一个循环,但是对于这个内部循环,我需要角度循环的当前索引 假设这是基本结构:Html 如何在JSTL代码中访问ng repeat$index变量?,html,angularjs,jsp,jstl,el,Html,Angularjs,Jsp,Jstl,El,我有一个div块,它使用ng repeat。在这个角度循环中,我需要JSTL中有一个循环,但是对于这个内部循环,我需要角度循环的当前索引 假设这是基本结构: <div ng-repeat="foo in fooBarCtrl.blah | orderBy: '_order' track by $index"> <c:forEach var="element" items="${JSTLarray[**NEED_ANGULAR_INDEX_HERE**]}">
<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>
由于angular和JSP的操作方式,我甚至不确定是否有可能直接访问JSTL代码中的$index变量。然而,我正试图想出解决这个问题的其他办法
如何获取JSTL/EL父循环中角度循环的当前索引?您最好将JSTLArray序列化为JSON,并以某种方式通过
ng init
传递,并将迭代保留为ng repeat
,而不是c:forEach
。很难将这两个世界混合在一起,因为一个是服务器端渲染,另一个是客户端渲染,所以很明显,您无法访问JSTL中的$index
,因为只有在编译页面并将其发送到客户端之后,才会对其进行评估
我过去绕过这个限制的方法是使用一个自定义JSTL函数,比如${lib:toJSON(JSTLArray)}
,它将通过Jackson库将所述数组转换为JSON(或任何Java bean)。通过这种方式,现在可以使用Angular渲染数组的内容。然后,我将在Angular控制器中创建一个“init”函数,并将该JSON传入,然后对其执行任何操作。init调用类似于nginit=“fooBarCtrl.someInitFunction(${lib:toJSON(JSTLArray)})”
下面是我之前编写的toJson
方法的代码片段
`
`
希望这有所帮助。JSTL在服务器端呈现,Angular是在客户端运行的javascript框架。。。我认为在客户端访问javascript变量可能是一个挑战。您可能可以像在JSF中一样,在服务器端使用局部呈现来实现这一点。
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;
}
}