EL中的java.lang.Character比较

时间:2012-02-03 11:50:38

标签: jsf character el

我有一个java.lang.Character bean属性,我想在EL中进行比较,如下所示:

#{q.isMultiple eq 'Y'}

它永远不会评估true

这是如何引起的?如何解决?

4 个答案:

答案 0 :(得分:2)

与“普通Java”相反,无论您是在EL中单引号还是双引引文字,它们都代表java.lang.String个实例。您的方法返回java.lang.Character实例,因此在两个实例之间的true调用中永远不会返回equals()

解决方案是将其更改为Stringboolean返回类型。属性名称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吗?