我升级了我的Java EE Web应用程序以使用更新的PrimeFaces版本,突然在PrimeFaces commandlink的action属性中调用重载的bean方法不再起作用了。我尝试使用JSF默认的commandlink来测试它,这个也没用。
方法签名如下:
public void updateA(B b);
public void updateA(A a);
它总是试图将A转换为B.
更好奇的是,在升级之前它怎么可能有效?
答案 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);
}