我有一个java.lang.Character
bean属性,我想在EL中进行比较,如下所示:
#{q.isMultiple eq 'Y'}
它永远不会评估true
。
这是如何引起的?如何解决?
答案 0 :(得分:2)
与“普通Java”相反,无论您是在EL中单引号还是双引引文字,它们都代表java.lang.String
个实例。您的方法返回java.lang.Character
实例,因此在两个实例之间的true
调用中永远不会返回equals()
。
解决方案是将其更改为String
或boolean
返回类型。属性名称isMultiple
强烈建议boolean
。您只需要从属性名称中删除is
并将其保留在getter方法中。
private boolean multiple;
public boolean isMultiple() {
return multiple;
}
#{q.multiple}
另一种方法是使用enum
。这仅适用于您有两个以上的州(或者三个,Boolean
还包括null
)。
答案 1 :(得分:2)
也可以将Character
转换为String
,然后将其打印为<c:set>
的正文,如下所示:
<c:set var="isMultipleVal">#{q.isMultiple}</c:set>
然后比较它:
#{isMultipleVal eq 'Y'}
答案 2 :(得分:1)
如果您使用的是EL 2.2,则有一种解决方法:
#{q.isMultiple.toString() eq 'Y'}
答案 3 :(得分:-1)
您可能需要在变量'q'的类中查看属性isMultiple
。请验证您的班级是否具有签名为public char getIsMultiple(){}
的getter方法。
此外,您确定${q.isMultiple eq 'Y'}
会true
吗?