我从Glassfish 3升级到4,现在我的JSP正在抛出NPE.我没有更改任何代码,因此它必须与Glassfish有所不同.过去看起来像这样的JSP代码:
<c:when test="${invoke}">
现在给我一个NPE,除非我改成它:
<c:when test="${not empty invoke && invoke}">
我想知道为什么这个改变是必要的.有人能告诉我是什么造成的吗?为什么之前曾经工作过,不再有效?
最佳答案 表达式语言3显然是JEE7的一部分,所以你可以查看
specification.经过一些搜索后,我发现了
this answer,这表明EL 3.0改变了它的默认行为而不是2.2.如果您可以更改默认的强制行为以匹配以前的行为,那么您的问题就会消失.我不知道如何在Glassfish中这样做.否则,您可能会考虑切换到布尔基元而不是布尔对象.
The default coercion for
null
s to non-primitive types (exceptString
) returnsnull
s. For instance, anull
coerced toBoolean
now returns anull
, while anull
coerced toboolean
returnsfalse
.
此外,当抱怨NPE时,实际上总是需要提供堆栈跟踪的相关部分.知道哪个类和方法抛出异常是非常重要的.