无法读取 bean 上的布尔值 属性 'isEmpty'
Cannot read boolean property 'isEmpty' on bean
我在 jsp 中显示 Java bean 的 boolean
属性 时遇到了一个奇怪的问题。似乎一个名为 isEmpty()
的 getter 在 EL 解析器上导致了 ParseException。
出于演示目的,我创建了一个 class 来显示问题。
public class Bookcase {
public boolean isWithoutContent() {
return true;
}
public boolean isEmpty() {
return true;
}
}
正在调用 jsp 中的属性:
${bookcase.withoutContent}
${bookcase.empty}
第一个显示 true
而第二个抛出错误:
org.apache.el.parser.ParseException: Encountered " "empty" "empty ""
at line 1, column 23.
Was expecting:
<IDENTIFIER> ...
现在我知道有一个 EL empty
运算符,但显然点运算符建议我在 bookcase
对象上调用 isEmpty()
方法?显然不是,考虑到错误。
在实际的 bean 上我不能/不想重命名 isEmpty()
方法,但是如何在 jsp 中显示这个 属性?
毕竟这很简单:
${bookcase['empty']}
但我仍然感到困惑,为什么在点符号中使用 empty
就像保留字一样。
empty
是 EL 中的一个特殊关键字,它主要检查 nullness 和 emptyness。通常像下面这样使用:
<c:if test="${empty bean.object}"> <!-- if (object == null) -->
<c:if test="${empty bean.string}"> <!-- if (string == null || string.isEmpty()) -->
<c:if test="${empty bean.collection}"> <!-- if (collection == null || collection.isEmpty()) -->
<c:if test="${empty bean.map}"> <!-- if (map == null || map.isEmpty()) -->
<c:if test="${empty bean.array}"> <!-- if (array == null || array.length == 0) -->
但是,您将它用作 bean 属性,EL 感到困惑。 EL specification:
禁止使用 EL 关键字和 Java 标识符作为 bean 属性 名称
1.17 Reserved Words
The following words are reserved for the language and must not be used as identifiers.
and eq gt true instanceof
or ne le false empty
not lt ge null div mod
Note that many of these words are not in the language now, but they may be in the future, so developers must avoid using these words.
您需要重命名它,或者使用 ${bean['empty']}
中的大括号表示法,或者作为完全不同的替代方案让您的 Bookcase
实现,例如Collection
接口,这样你就可以只使用 ${empty bookcase}
.
另请参阅:
- Evaluate empty or null JSTL c tags
- How does EL empty operator work in JSF?
- instanceof check in EL expression language
我在 jsp 中显示 Java bean 的 boolean
属性 时遇到了一个奇怪的问题。似乎一个名为 isEmpty()
的 getter 在 EL 解析器上导致了 ParseException。
出于演示目的,我创建了一个 class 来显示问题。
public class Bookcase {
public boolean isWithoutContent() {
return true;
}
public boolean isEmpty() {
return true;
}
}
正在调用 jsp 中的属性:
${bookcase.withoutContent}
${bookcase.empty}
第一个显示 true
而第二个抛出错误:
org.apache.el.parser.ParseException: Encountered " "empty" "empty ""
at line 1, column 23.
Was expecting:
<IDENTIFIER> ...
现在我知道有一个 EL empty
运算符,但显然点运算符建议我在 bookcase
对象上调用 isEmpty()
方法?显然不是,考虑到错误。
在实际的 bean 上我不能/不想重命名 isEmpty()
方法,但是如何在 jsp 中显示这个 属性?
毕竟这很简单:
${bookcase['empty']}
但我仍然感到困惑,为什么在点符号中使用 empty
就像保留字一样。
empty
是 EL 中的一个特殊关键字,它主要检查 nullness 和 emptyness。通常像下面这样使用:
<c:if test="${empty bean.object}"> <!-- if (object == null) -->
<c:if test="${empty bean.string}"> <!-- if (string == null || string.isEmpty()) -->
<c:if test="${empty bean.collection}"> <!-- if (collection == null || collection.isEmpty()) -->
<c:if test="${empty bean.map}"> <!-- if (map == null || map.isEmpty()) -->
<c:if test="${empty bean.array}"> <!-- if (array == null || array.length == 0) -->
但是,您将它用作 bean 属性,EL 感到困惑。 EL specification:
禁止使用 EL 关键字和 Java 标识符作为 bean 属性 名称1.17 Reserved Words
The following words are reserved for the language and must not be used as identifiers.
and eq gt true instanceof or ne le false empty not lt ge null div mod
Note that many of these words are not in the language now, but they may be in the future, so developers must avoid using these words.
您需要重命名它,或者使用 ${bean['empty']}
中的大括号表示法,或者作为完全不同的替代方案让您的 Bookcase
实现,例如Collection
接口,这样你就可以只使用 ${empty bookcase}
.
另请参阅:
- Evaluate empty or null JSTL c tags
- How does EL empty operator work in JSF?
- instanceof check in EL expression language