java – 当我从Glassfish 3升级到4时,为什么我的JSP中会出现NullPointerExceptions?

我从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 nulls to non-primitive types (except String) returns nulls. For instance, a null coerced to Boolean now returns a null, while a null coerced to boolean returns false.

此外,当抱怨NPE时,实际上总是需要提供堆栈跟踪的相关部分.知道哪个类和方法抛出异常是非常重要的.

点赞