奇怪行为
我在我的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
,不是一个小脚本变量的请求属性因此编译器可以自由地优化usused变量。
如果您想使用scriptlet变量,请尝试<c:when test="<%= blockScreen %>">
。
正确的钱!谢谢! – Manish
AFAIR变量的作用域是scriplet(和生成的servlet)的本地作用域,所以它在页面的其余部分是NOT可见/可访问。为此,编译器将完全删除它。
如果可以使用相同名称的,这意味着它宣布页面宽度可变别处的页面其他变量地方......
但是,如果在下面的c:choose标签中使用了相同的变量,它应该不会导致编译错误? – Manish
没有编译错误,因为您正在声明限制范围更大的局部变量。 –
你如何在''标签中使用变量? –
axtavt
对不起,该变量用在c:choose标签中。我用c:choose代码更新了这个问题。 – Manish
用javap工具运行类文件,看看变量是否仍然存在。 – Shailendra