Jsp 在JSTL/EL中,枚举到字符串的比较到底应该如何工作?

Jsp 在JSTL/EL中,枚举到字符串的比较到底应该如何工作?,jsp,jakarta-ee,enums,jstl,resin,Jsp,Jakarta Ee,Enums,Jstl,Resin,给定一个JSP页面,以及一些绑定到一个名为“foo”的请求属性的对象,我可以通过以下方式引用“foo”: 如果“foo”的值有一个名为“type”的bean属性,并且“type”的类型是某个enum类,那么为了进行比较,我将使用一个字符串: <c:if test='${foo.type == "WHATEVER"}'> 然后假设我的enum类中的一个常量的名称为“WHATEVER”,那么比较应该有效,并生成true或false 现在我想知道的是,servlet容器究竟应该如何执

给定一个JSP页面,以及一些绑定到一个名为“foo”的请求属性的对象,我可以通过以下方式引用“foo”:

如果“foo”的值有一个名为“type”的bean属性,并且“type”的类型是某个
enum
类,那么为了进行比较,我将使用一个字符串:

<c:if test='${foo.type == "WHATEVER"}'>

然后假设我的
enum
类中的一个常量的名称为“WHATEVER”,那么比较应该有效,并生成
true
false

现在我想知道的是,servlet容器究竟应该如何执行这种比较。一些Oracle文档()暗示(模糊地)所发生的事情是将字符串常量转换为
enum
类型,然后进行比较

我正在调查一种情况,其中涉及我认为在Jetty/Tomcat(即Apache)和Resin之间工作方式不同的代码。Apache世界似乎正在做正确的事情,或者至少是我从Oracle的文档中所期望的事情

我担心的是我的
enum
的另一个属性可能会导致树脂实现做一些不同的事情。具体来说,我的
enum
类有一个
.toString()
实现,该实现返回的字符串与
.name()
返回的字符串不同。这种怪癖不会在Apache服务器上造成任何问题,至少我从未见过这样的问题。如果Resin通过将enum常量转换为字符串(通过
.toString()
,而不是
.name()
)而不是将字符串转换为
enum
类型来实现比较,那么事情将无法始终如一地工作

请注意,在所有其他方面,在JSP/JSTL/EL中以各种其他方式使用我的
enum
类型(很多类型都是这样)都没有问题。事实上,JSP中只有少数地方有EL逻辑,因为应用程序通过客户端模板呈现完成大部分工作


编辑-我很确定我确认了树脂做比较的方式不同,尽管我不知道到底是什么。我自己的EL函数库中有一个“name”EL函数(原因我不记得了),所以我可以用它来解决这个问题。

不幸的是,Resin处理不正确。我在

上提交了一个bug,您是否尝试确保name()值是用于字符串比较的值[假设是toString()怪癖让您挂断了]?@alfreema是的,但我自己的Jetty(7.6.15;这是我可以使用常规
.war
文件的最新版本)不支持这一点。不过,我自己的EL函数确实解决了这个问题;这就是我所怀疑的。我以前在树脂中遇到过EL的其他“有趣”类型转换问题。
<c:if test='${foo.type == "WHATEVER"}'>