如果一个object属性声明为Boolean类型(不是原始boolean)那么EL识别它似乎有问题!
假设您有以下对象
class Case{
private Boolean valid;
public Boolean isValid(){
return this.valid;
}
public void setValid(Boolean val){
this.valid = val;
}
}
Run Code Online (Sandbox Code Playgroud)
假设我们在名称为"case"的请求中放置了Case类型的对象,然后我在JSP中尝试这个:
<td>Object is ${case.valid ? "Valid":"Invalid"} </td>
Run Code Online (Sandbox Code Playgroud)
这给了我错误"有效"不是对象Case的属性!如果我将有效从布尔值更改为原始布尔值,它就可以了!
这是EL中布尔类型的已知问题,它们不被识别为布尔值而是被识别为Java"普通"对象?处理这个问题的正确方法是什么?
谢谢
no.*_*ing 19
所有的例子我见过谈boolean,让形式的干将性能isProperty()除了getProperty()永不Boolean秒.
我找不到任何关于这种行为的"官方"参考,但是这篇博文似乎描述了我最初评论时所怀疑的 - 一个Boolean是一个对象,而一个boolean是原始的,而Java有自动装箱,EL会忽略isProperty()吸气剂返回a Boolean并改为查找getProperty()方法.
所以我怀疑的是,在你的例子,如果你改变的返回类型isValid()来boolean代替Boolean(但保留字段的类型Boolean),因为你希望你的EL表达式会工作.
小智 5
EL将布尔值视为对象(完全正确),因此它寻找getValid()方法。这与JavaBeans规范一致。
尝试将属性从Boolean引用类型更改为boolean原始类型。如果无法做到这一点,并且您正在使用新的EL(即2.2-我不确定2.1),则可以调用方法,这${case.isValid()}将是正确使用此新EL功能的示例。