在我的 servlet 中,我通过 for 循环将许多值发送回 JSP 页面,如下所示:
protected void doGet(HttpServletRequest request, HttpServletResponse response){
for (int i = 0; i < veryBigNumber; i++){
if (something){
request.setAttribute("value" + i, "true");
else{
request.setAttribute("value" + i, "false");
}
}
在 JSP 中,我想用 JavaScript 和 EL 以相同的方式读取它们:
<script>
for (var i=0; i < veryBigNumber; i++){
if ("${value + (i)}" == "true"){
doSomething;
} else{
doSomethingElse;
}
}
</sctipt>
问题是我不知道如何使变量i成为EL表达式的一部分。是否可以?如果是,怎么做?
谢谢...
最佳答案
您在这里犯了一个概念错误。 Java/JSP/EL 在网络服务器上运行并生成 HTML/CSS/JS,而 HTML/CSS/JS 又在网络浏览器中运行(右键单击网络浏览器中的页面,然后执行查看源代码自行查看)。然而您期望 EL 和 JS 在网络浏览器中同步运行。这不是真的。
您基本上需要使用 JSP 执行迭代和 EL 评估,并相应地编写它,以便它打印您想要的正确 JS 代码。
<script>
<c:forEach begin="0" end="${veryBigNumber - 1}" var="i">
<c:set var="value" value="value${i}" />
<c:choose>
<c:when test="${requestScope[value]}">
doSomething;
</c:when>
<c:otherwise>
doSomethingElse;
</c:otherwise>
</c:choose>
</c:forEach>
</script>
请注意,这个特定的构造很笨拙并且有代码味道。具体的功能需求并不完全清楚,因此不可能为您想要实现的任何目标提出更优雅的解决方案。
关于EL 表达式中的 JavaScript 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13786167/