我的jsp脚本中有以下代码(在内部):

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变量。我反编译了类文件,可以看到以下代码:

   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变量,因此编译器可以自由地优化使用的变量。

如果要改用scriptlet变量,请尝试<c:when test="<%= blockScreen %>">

关于java - JSP编译器的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12492831/

10-13 00:20