2012-03-19 3 views
27

새로운 PrimeFaces 버전을 사용하기 위해 Java EE 웹 응용 프로그램을 업그레이드했는데 갑자기 PrimeFaces commandlink의 작업 특성에서 오버로드 된 Bean 메서드 호출이 더 이상 작동하지 않았습니다. JSF 기본 명령 링크를 사용하여 테스트했지만이 중 하나도 작동하지 않았습니다.EL은 오버로드 된 메서드를 지원합니까?

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

그것은 항상

더 호기심, 어떻게 업그레이드 전에 일할 수있는 B.

에 캐스팅하려고 다음과 같이

방법 서명

은?

답변

32

EL은 지원하지 않습니다. 항상 EL 메소드 호출과 이름 (인수의 양)이 일치하는 Class#getMethods() 배열의 첫 번째 메소드입니다. 매번 동일한 메소드를 리턴하는지 여부는 사용 된 JVM 작성/버전에 따라 다 (니다. 아마 당신은 그 사이에 Java SE 업그레이드를 만들었을 것입니다. javadoc도 다음과 같이 말합니다.

반환되는 배열의 요소는 정렬되지 않으며 특정 순서가 아닙니다.

불특정 행동에 의존해서는 안됩니다. 그들에게 다른 이름을주십시오.

+0

큰 덕분에, 당신의 설명은 지금 – djmj

+1

이 더 이상 JSF 2에서 지원되지 않는 이유있는 (기술적) 이유가 분명히 일을 무엇입니까? 나는 이것이 JSF 1.x 버전에서 가능하다고 확신한다. 그렇지 않습니까? – MrD

+0

이것은 JSF에 특정한 것은 아닙니다. – BalusC

5

이 문제를 해결할 수있는 방법은 제네릭 방법을 만들고 그 방법 내에서 '라우팅'을하는 것입니다. 나는 이것이 이상적이지는 않을 것이라는 것을 안다.하지만 결국 함수와 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); 
} 
관련 문제