首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mojarra JSF2.1在升级到JDK7后无法调用正确的方法

Mojarra JSF2.1在升级到JDK7后无法调用正确的方法
EN

Stack Overflow用户
提问于 2013-06-21 18:02:23
回答 1查看 164关注 0票数 0

我们正在考虑将我们相当大的JDK7 (使用Primefaces,Mojarra2.1,Jetty)从Sun +Jetty6转换到Oracle +Jetty9,这在很大程度上是没有痛苦的,但在Java7上似乎方法访问是不同的。

当拥有包含这两个方法的类时

代码语言:javascript
运行
复制
public Object getValue(int _index) {...}

代码语言:javascript
运行
复制
public Object getValue(String _name) {...}

并使用

代码语言:javascript
运行
复制
#{myBean.getValue(index)}

在Java6中,它将调用正确的方法(带有int参数)并返回正确的值。然而,在Java7中,它将静默地失败,并且不会返回/打印任何内容。当我更改方法名并在JSF文件中使用适当的名称时,访问就会按预期工作。

为什么我只在Java 7上看到这一点,有没有一种方法可以恢复旧的行为(基本上,它的工作原理就像在Java代码中一样--基于参数的类使用正确的方法)?

EN

回答 1

Stack Overflow用户

发布于 2013-06-21 20:58:55

这并不是特定于JSF/Mojarra的,而是针对ELreflection API的。例如,在使用MyFaces时,您会遇到完全相同的问题。

您在Jetty使用的EL实现中遇到了一个错误。在查找方法时,它显然没有考虑方法参数类型(与EL函数的工作方式完全相同)。Buggy EL实现将在Class#getDeclaredMethods()上循环,并选择第一个与名称匹配的参数类型,而忽略参数类型。正如您在Class#getDeclaredMethods() javadoc中所看到的,

...返回的数组中的元素不会排序,也不会按任何特定顺序排序。..。

顺序不明确。实际上,在幕后,它依赖于JVM的制造商/版本。这至少解释了切换JVM时的差异。

我建议升级正在使用的EL实现,或者重命名您的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17232506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档