EL 中的 java.lang.Character 比较
我有一个 java.lang.Character
bean 属性,我想在 EL 中对其进行比较,如下所示:
#{q.isMultiple eq 'Y'}
它永远不会评估 true
。
这是如何引起的以及如何解决?
I've a java.lang.Character
bean property which I'd like to compare in EL as below:
#{q.isMultiple eq 'Y'}
It does not ever evaluate true
.
How is this caused and how can I solve it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
与“普通 Java”相反,无论您在 EL 中单引号还是双引号文字,它们都代表
java.lang.String
实例。您的方法返回一个java.lang.Character
实例,因此在两个实例之间的equals()
调用中永远不会返回true
。解决方案是将其更改为
String
或boolean
返回类型。属性名称isMultiple
强烈建议使用boolean
。您只需从属性名称中删除is
并将其保留在 getter 方法中即可。另一种方法是使用
enum
。仅当您有两个以上的状态(或者可能是三个,Boolean
也包括null
)时,这才适用。In contrary to "plain Java", whether you single or double-quote your literals in EL, they represent both
java.lang.String
instances. Your method is returning ajava.lang.Character
instance, so this will never returntrue
in anequals()
call between both instances.The solution is to change it to a
String
orboolean
return type. The property nameisMultiple
strongly suggests aboolean
. You only need to remove thatis
from the property name and keep it in the getter method.An alternative is using an
enum
. This would only be applicable if you have more than two states (or perhaps three, aBoolean
also includesnull
).还可以通过将
Character
转换为String
来完成此操作,方法是将其打印为
的正文,如下所示:然后进行比较反而:
Can also do this by converting the
Character
toString
by printing it as body of<c:set>
as below:And then comparing it instead:
如果您使用 EL 2.2,一种解决方法是:
If you're using EL 2.2, one workaround is:
您可能需要查看变量“q”的类中的属性
isMultiple
。请验证您的类是否具有签名为public char getIsMultiple(){}
的 getter 方法。另外,您确定 ${q.isMultiple eq 'Y'} 给出
true
吗?You may need to look the property
isMultiple
in the Class of variable 'q'. Please verify your class having a getter method with signature aspublic char getIsMultiple(){}
.Also, are you sure
${q.isMultiple eq 'Y'}
givestrue
?