EL 中的 java.lang.Character 比较

发布于 2025-01-01 22:42:33 字数 180 浏览 1 评论 0原文

我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

挽梦忆笙歌 2025-01-08 22:42:33

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

解决方案是将其更改为 Stringboolean 返回类型。属性名称 isMultiple 强烈建议使用 boolean。您只需从属性名称中删除 is 并将其保留在 getter 方法中即可。

private boolean multiple;

public boolean isMultiple() {
    return multiple;
}
#{q.multiple}

另一种方法是使用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 a java.lang.Character instance, so this will never return true in an equals() call between both instances.

The solution is to change it to a String or boolean return type. The property name isMultiple strongly suggests a boolean. You only need to remove that is from the property name and keep it in the getter method.

private boolean multiple;

public boolean isMultiple() {
    return multiple;
}
#{q.multiple}

An alternative is using an enum. This would only be applicable if you have more than two states (or perhaps three, a Boolean also includes null).

川水往事 2025-01-08 22:42:33

还可以通过将 Character 转换为 String 来完成此操作,方法是将其打印为 的正文,如下所示:

<c:set var="isMultipleVal">#{q.isMultiple}</c:set>

然后进行比较反而:

#{isMultipleVal eq 'Y'}

Can also do this by converting the Character to String by printing it as body of <c:set> as below:

<c:set var="isMultipleVal">#{q.isMultiple}</c:set>

And then comparing it instead:

#{isMultipleVal eq 'Y'}
喜爱纠缠 2025-01-08 22:42:33

如果您使用 EL 2.2,一种解决方法是:

#{q.isMultiple.toString() eq 'Y'}

If you're using EL 2.2, one workaround is:

#{q.isMultiple.toString() eq 'Y'}
夏末 2025-01-08 22:42:33

您可能需要查看变量“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 as public char getIsMultiple(){}.

Also, are you sure ${q.isMultiple eq 'Y'} gives true?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文