java - jsp 编译器的奇怪行为

标签 java jsp jboss

我的 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/

相关文章:

java - 为什么这似乎没有初始化

java - H2数据库使用Spring-boot和spring security显示空白页面(在线尝试解决方案)

java - JSP EL 评估问题

java - Java EE/JBoss AS 6 中的预身份验证用户

Gradle Ear 插件 : Adding modules without version specifier

java - Java Swing MVC体系结构-Q与MCVE示例

java - Android Studio 数据绑定(bind)中此处不允许使用元素数据

java - 即使包含所有必需的 jar 后,斐济图表也会遇到异常

javascript - 如果使用 required 属性指定,则验证 HTML 表单字段

java - 如何让本地JBOSS AS 7提供静态资源?