gpt4 book ai didi

java - 升级到 JDK7 后,Mojarra JSF 2.1 无法调用正确的方法

转载 作者:行者123 更新时间:2023-12-01 14:24:53 26 4
gpt4 key购买 nike

我们正在考虑将相当大的 Web 应用程序(使用 Primefaces、Mojarra 2.1、Jetty)从 Sun JDK6 + Jetty 6 切换到 Oracle JDK7 + Jetty 9。大多数情况下,这很轻松,但 Java 上的方法访问似乎有所不同7.

当有一个包含两种方法的类时

public Object getValue(int _index) {...}

public Object getValue(String _name) {...}

并使用

#{myBean.getValue(index)}

将调用正确的方法(使用 int 参数)并在 Java 6 下返回正确的值。但是,在 Java 7 中,它会默默地失败并且不会返回/打印出任何内容。当我更改方法名称并在 JSF 文件中使用适当的名称时,访问将按预期工作。

为什么我只在 Java 7 上看到这个,有没有办法恢复旧的行为(基本上,它的工作方式与 Java 代码中的一样 - 根据参数的类使用正确的方法)?

最佳答案

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

您在 Jetty 使用的 EL 实现中遇到了一个错误。在查找方法时,它显然没有考虑方法参数类型(就像 EL 函数的工作方式一样)。有缺陷的 EL 实现只会循环遍历 Class#getDeclaredMethods() 并选择第一个与名称匹配的方法并忽略参数类型。正如您可以在 Class#getDeclaredMethods() javadoc 中读到的那样,

... The elements in the array returned are not sorted and are not in any particular order. ...

订单未定义。实际上,在幕后,它依赖于 JVM 的品牌/版本。这至少解释了切换 JVM 时的差异。

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

关于java - 升级到 JDK7 后,Mojarra JSF 2.1 无法调用正确的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17232506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com