2012-03-19 19 views
27

Actualicé mi aplicación web Java EE para usar la versión más reciente de PrimeFaces y de repente la llamada de un método de bean sobrecargado en un atributo de acción del comando CommandFace no funcionó más. Intenté usar JSF default commandlink para probarlo y este tampoco funcionó.¿EL soporta métodos sobrecargados?

Las firmas de los métodos son los siguientes:

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

Siempre intentado convertir A a B.

Más curioso, ¿cómo podría funcionar antes de la actualización?

Respuesta

32

EL no lo admite, no. Siempre será el primer método de la matriz Class#getMethods() cuyo nombre (y cantidad de argumentos) coincide con la llamada al método EL. Si devuelve el mismo método cada vez o no depende de la marca/versión de JVM utilizada. Quizás también hayas hecho una actualización Java SE mientras tanto. El javadoc incluso dice esto:

Los elementos en la matriz devuelta no están ordenados y no están en ningún orden en particular.

No debe confiar en un comportamiento no especificado. Dales un nombre diferente.

+0

grandes gracias, tu explicación clara hace que las cosas ahora – djmj

+1

¿Hay alguna razón (técnico) por qué esto no se admite en JSF 2 más? Estoy bastante seguro de que esto fue posible en las versiones JSF 1.x, ¿no? – MrD

+0

Esto no es específico de JSF. – BalusC

5

La forma en que puede evitar esto es crear un método genérico y hacer el 'enrutamiento' dentro de ese método. Sé que esto podría no ser ideal, pero terminas con menos configuraciones en funciones y páginas 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); 
} 
Cuestiones relacionadas