我升級了我的Java EE Web應用程序以使用更新的PrimeFaces版本,並且突然在PrimeFaces commandlink的操作屬性中重載的bean方法的調用不再有效。我試圖使用JSF默認命令鏈接來測試它,而這個也沒有工作。EL支持重載方法嗎?
的方法簽名如下:
public void updateA(B b);
public void updateA(A a);
它總是試圖投A到B.
更好奇,怎麼會在升級前工作?
我升級了我的Java EE Web應用程序以使用更新的PrimeFaces版本,並且突然在PrimeFaces commandlink的操作屬性中重載的bean方法的調用不再有效。我試圖使用JSF默認命令鏈接來測試它,而這個也沒有工作。EL支持重載方法嗎?
的方法簽名如下:
public void updateA(B b);
public void updateA(A a);
它總是試圖投A到B.
更好奇,怎麼會在升級前工作?
EL不支持它,沒有。它始終是Class#getMethods()
數組的名字(和參數數量)與EL方法調用匹配的第一個方法。它是否每次都返回相同的方法取決於所使用的JVM make/version。也許您在此期間也進行了Java SE升級。 javadoc甚至說:
返回的數組中的元素沒有排序,也沒有任何特定的順序。
您不應該依賴未指定的行爲。給他們一個不同的名字。
你可以解決這個問題的方法是創建一個通用方法,並在該方法內執行「路由」。我知道這可能不太理想,但是最終在函數和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);
}
非常感謝,您的解釋讓事情變得清晰 – djmj 2012-04-26 03:28:15
JSF 2中不再支持這種技術嗎?我很確定這在JSF 1.x版本中是可行的,不是嗎? – MrD 2014-03-06 14:53:28
這不是JSF特有的。 – BalusC 2014-03-06 15:11:39