EL支持重载方法吗?

时间:2012-03-19 00:31:31

标签: el overloading

我升级了我的Java EE Web应用程序以使用更新的PrimeFaces版本,突然在PrimeFaces commandlink的action属性中调用重载的bean方法不再起作用了。我尝试使用JSF默认的commandlink来测试它,这个也没用。

方法签名如下:

public void updateA(B b);
public void updateA(A a);

它总是试图将A转换为B.

更好奇的是,在升级之前它怎么可能有效?

2 个答案:

答案 0 :(得分:34)

EL不支持,不。它始终是Class#getMethods()数组的第一个方法,其名称(和参数数量)与EL方法调用相匹配。它是否每次都返回相同的方法取决于所使用的JVM make / version。也许您同时也进行了Java SE升级。 javadoc甚至说过:

  

返回的数组中的元素没有排序,也没有任何特定的顺序。

您不应该依赖未指定的行为。给他们一个不同的名字。

答案 1 :(得分:4)

你可以解决这个问题的方法是创建一个通用方法并进行“路由”。在那个方法里面。我知道这可能不太理想,但最终你会在函数和XHTML页面中使用较少的配置。

if (A.class.isInstance(obj)) {
    A o = (A) obj;
    return method(o, highRes);
} else if (B.class.isInstance(obj)) {
    B o = (B) obj;
    return method(o, highRes);
} else if (C.class.isInstance(obj)) {
    C o = (C) obj;
    return method(o, highRes);
} else {
    throw new FacesException("Unsupported Conversion: " + obj);
}