这是我在jsp中的代码:
<script>
var myArray = [];
</script>
<c:forEach var="attributes" items="FROMthisBEAN" varStatus="vStatus" >
<script>
//Executes for each iteration. Do something COOL.
myArray.push("Something from this iteration");
</script>
</c:forEach>
现在请考虑以下事项:
<script>
var myArray = [];
<c:forEach var="attributes" items="FROMthisBEAN" varStatus="vStatus" >
myArray.push("Something from this iteration");
</c:forEach>
</script>
<c:forEach var="attributes" items="FROMthisBEAN" varStatus="vStatus" >
//Executes for each iteration. Do something COOL.
</c:forEach>
两个代码都给我相同的输出 问题是哪一个在绩效方面更好? 在第一种情况下,c:forEach中的脚本标记一次又一次地重复 但在第二种情况下,我正在创建一个c:forEach,它已经存在于JSP中 完全迷失在这里。请指教。
答案 0 :(得分:2)
将这些内容放在单独的<script>
标记中完全没必要。如果你真的想让它变得更好,你应该考虑创建一个JavaScript数组文字,而不是一系列的“push()”调用。将Java数组呈现为JSON的JSP扩展可以解决问题。
编辑 - 详细说明,作为JSTL函数提供的JSON编码器可以让你编写如下内容:
<script>
var myArray = ${yourTLD:toJSON( some.java.array _)};
</script>
“toJSON”函数将获取数组并将其呈现为标准JSON,具体取决于其内容(当然,根据所使用的JSON代码,可能会受到一定限制)。传递给浏览器的JavaScript结果如下所示:
<script>
var myArray = [ "something", "something", "something" ];
</script>
完全取决于Java数组中的内容。 Java有各种JSON编码库,编写一个非常难(实际上在特殊情况下更容易比调整开源库)。将函数作为JSTL EL函数提供是在某处创建公共静态函数并在.tld文件中声明它的问题。