我的 jsp scriptlet 中有以下代码(在 <% %> 内):
boolean blockScreen = false;
if(title.equalsIgnoreCase(labelA) || title.equalsIgnoreCase(labelB))
{
blockScreen = true;
}
对应上述jsp生成的java文件包含以下代码(相同):
boolean blockScreen = false;
if(title.equalsIgnoreCase(labelA) || title.equalsIgnoreCase(labelB))
{
blockScreen = true;
}
但是当我调试时,我看不到 blockScreen 变量。我反编译了class文件,可以看到如下代码:
if(!title.equalsIgnoreCase(labelA))
if(!title.equalsIgnoreCase(labelB));
不知道为什么 blockScreen 变量在类文件中被清除。相同的变量在 c:choose 标记中进一步使用:
<c:choose>
<c:when test="${blockScreen==true}">
<!--do something -->
</c:when>
<c:otherwise>
<!--do something else -->
</c:otherwise>
</c:choose>
我正在使用 JBoss EAP 6 服务器。
在这方面的任何帮助表示赞赏。
最佳答案
EL表达式${blockScreen==true}
使用名为 blockScreen
的请求属性,不是同名的 scriptlet 变量,因此编译器可以自由优化 usused 变量。
如果您想使用 scriptlet 变量,请尝试 <c:when test="<%= blockScreen %>">
.
关于java - jsp 编译器的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12492831/