无法读取JSP EL中的Boolean属性

Dha*_*rNz 12 jsp el

如果一个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表达式会工作.

  • 博客文章不存在. (2认同)

小智 5

EL将布尔值视为对象(完全正确),因此它寻找getValid()方法。这与JavaBeans规范一致。

尝试将属性从Boolean引用类型更改为boolean原始类型。如果无法做到这一点,并且您正在使用新的EL(即2.2-我不确定2.1),则可以调用方法,这${case.isValid()}将是正确使用此新EL功能的示例。