2012-03-19 9 views
27

Ho aggiornato la mia applicazione web Java EE per utilizzare la versione di PrimeFaces più recente e improvvisamente la chiamata di un metodo di bean sovraccarico in un attributo di azione del comando CommandFaces non ha funzionato più. Ho provato ad usare il comando predefinito JSF per testarlo e anche questo non ha funzionato.EL supporta metodi sovraccaricati?

Il metodo firme sono i seguenti:

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

E 'sempre cercato di lanciare dalla A alla B.

più curioso, come potrebbe lavorare prima dell'aggiornamento?

risposta

32

EL non lo supporta, no. Sarà sempre il primo metodo dell'array Class#getMethods() il cui nome (e la quantità di argomenti) corrisponde alla chiamata del metodo EL. Se restituisce lo stesso metodo ogni volta o meno dipende dalla marca/versione di JVM utilizzata. Forse hai fatto anche un aggiornamento di Java SE nel frattempo. Javadoc lo dice anche:

Gli elementi nella matrice restituita non sono ordinati e non sono in alcun ordine particolare.

Non si deve fare affidamento su un comportamento non specificato. Dagli un nome diverso.

+0

grande grazie, la tua spiegazione chiarisce ora – djmj

+1

C'è qualche motivo (tecnico) per cui questo non è più supportato in JSF 2? Sono abbastanza sicuro che ciò fosse possibile nelle versioni 1.x di JSF, non è vero? – MrD

+0

Questo non è specifico per JSF. – BalusC

5

Il modo per aggirare questo è creare un metodo generico e eseguire il "routing" all'interno di tale metodo. So che questo potrebbe non essere l'ideale, ma si finisce con meno configurazioni in funzioni e pagine 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); 
} 
Problemi correlati