如果一个对象属性声明为类型Boolean(不是原始布尔值),则EL识别中似乎有问题! 说你有以下对象 class Case{ private Boolean valid; public Boolean isValid(){ return this.valid; } public void setValid(Boolean val)
说你有以下对象
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>
这给我错误“有效”不是对象的属性Case!如果我将布尔值更改为原始布尔值,它可以工作!
这是EL中布尔类型的已知问题,它们不被识别为布尔值,而是Java“正常”对象?什么是正确的方法来处理这个?
谢谢
我曾经看过的所有例子都谈到布尔属性,除了getProperty()和从不布尔值之外,允许getProperty()形式的getter.我没有找到任何’官方’引用这个行为,但是this blog post似乎描述了我最初评论的时候我所怀疑的 – 一个布尔值是一个对象,而一个布尔是一个原始的,而Java有自动打包,EL将忽略isProperty ()getter返回一个布尔值,而是寻找一个getProperty()方法.
所以我怀疑,在你的例子中,如果你将isValid()的返回类型更改为布尔值,而不是布尔值(但是将该字段的类型保留为布尔值),则EL表达式将按照您期望的方式工作.