【发布时间】:2011-04-18 01:05:16
【问题描述】:
如果一个对象属性被声明为布尔类型(不是原始布尔),那么 EL 识别它似乎有问题!
假设你有以下对象
class Case{
private Boolean valid;
public Boolean isValid(){
return this.valid;
}
public void setValid(Boolean val){
this.valid = val;
}
}
假设我们在请求中放入了一个名为“case”的Case类型的对象,那么我在JSP中试试这个:
<td>Object is ${case.valid ? "Valid":"Invalid"} </td>
这给了我错误“有效”不是对象的属性案例!如果我将有效的布尔值更改为原始布尔值,它就可以工作!
这是 EL 中布尔类型的一个已知问题,即它们不被识别为布尔值而是作为 Java“普通”对象?处理这个问题的正确方法是什么?
谢谢
【问题讨论】:
-
我是一个菜鸟 JSP 用户,但你的
valid对象变量声明中的private不是意味着你不能直接访问它吗? -
是的,这在 Java 世界中是正确的,但是使用 EL,您可以使用 JavaBean 样式 (object.propertyName) 访问对象属性,前提是您提供了一个 getter(在本例中为 isValid)。因此,当您说 case.valid 时,您实际上是在调用 case.isValid()。您可以看到,如果我将 Boolean 更改为 boolean 它工作正常。
-
那么如果调用
isValid()这个方法,是不是也一样不行呢? -
你不能在 EL 中调用 isValid(),正如我所说,你使用 JavaBean 访问样式 object.propertyname。
-
所以我想我的下一个问题是,如果您将该声明更改为公开,它不起作用? (只是检查)