2013-03-22 13 views
6

sto usando JSF 2.metodo Invoke con varargs in EL getta java.lang.IllegalArgumentException: numero errato di argomenti

Ho un metodo che verifica la presenza di corrispondenti valori da un elenco di valori:

@ManagedBean(name="webUtilMB") 
@ApplicationScoped 
public class WebUtilManagedBean implements Serializable{ ... 

public static boolean isValueIn(Integer value, Integer ... options){ 
    if(value != null){ 
     for(Integer option: options){ 
      if(option.equals(value)){ 
       return true; 
      } 
     } 
    } 
    return false; 
} 


... 
} 

Per chiamare questo metodo in EL ho provato:

#{webUtilMB.isValueIn(OtherBean.category.id, 2,3,5)} 

ma mi ha dato un:

GRAVE [javax.enterprise.resource.webcontainer.jsf.context] (http-localhost/127.0.0.1: 8080-5) java.lang.IllegalArgumentException: numero errato di argomenti

C'è un modo per eseguire un tale metodo da EL?

risposta

15

No, non è possibile utilizzare argomenti variabili nelle espressioni del metodo EL, per non parlare delle funzioni EL.

La soluzione migliore è creare più metodi denominati diversi con una quantità diversa di argomenti fissi.

public static boolean isValueIn2(Integer value, Integer option1, Integer option2) {} 
public static boolean isValueIn3(Integer value, Integer option1, Integer option2, Integer option3) {} 
public static boolean isValueIn4(Integer value, Integer option1, Integer option2, Integer option3, Integer option4) {} 
// ... 

Come dubbia alternativa, si potrebbe passare una stringa commaseparated e dividerlo all'interno del metodo

#{webUtilMB.isValueIn(OtherBean.category.id, '2,3,5')} 

o anche una matrice di stringhe che viene creato fn:split() su una stringa commaseparated

#{webUtilMB.isValueIn(OtherBean.category.id, fn:split('2,3,5', ','))} 

ma in ogni caso, avresti ancora bisogno di analizzarli come numero intero o di convertire il numero intero passato in stringa.

Nel caso in cui si sia già in EL 3.0, è anche possibile utilizzare il nuovo EL 3.0 collection syntax senza la necessità dell'intera funzione EL.

#{[2,3,5].contains(OtherBean.category.id)} 
Problemi correlati