2013-01-01 20 views
5

C'è un problema con la selezione p:selectOneMenu quando si aggiunge uno f:selectItem.p: selectOneMenu preseleziona l'elemento precedente quando è presente l'elemento noSelectionOption

Vista:

<p:selectOneMenu value="#{selectionTest.selectedName}"> 
    <f:selectItem itemLabel="Select" noSelectionOption="true" /> 
    <f:selectItems value="#{selectionTest.allNames}" var="varName" itemLabel="#{varName}" itemValue="#{varName}" /> 
</p:selectOneMenu> 

Modello:

private List<String> allNames; 
private String selectedName; 

public MenuSelectionTestBean(){ 
    allNames = new ArrayList<String>(); 
    allNames.add("Ahmed"); 
    allNames.add("Mohamed"); 
    allNames.add("Ibrahim"); 
    allNames.add("Walid"); 

    selectedName ="Walid"; 
} 

Risultato:

enter image description here

La voce "Walid" deve essere selezionato, per quanto "Ibrahim" è selezionata, invece. Penso che PrimeFaces seleziona l'oggetto in base al suo indice nella lista e non al valore dell'oggetto.

Come è causato e come posso risolverlo?

risposta

7

Posso riprodurre il problema. Ho cercato nel codice sorgente PrimeFaces. Si tratta di un bug in PrimeFaces SelectOneMenuRenderer che viene esposto solo quando è stato utilizzato un elemento con noSelectionOption="true". Il renderer non genererà l'elemento HTML <option> dell'elemento di supporto <select>, ma genererà lo <li> dell'elenco visivo <ul> per quello. In altre parole, lo contiene nel tuo caso 4 articoli e gli articoli <ul> 5. Lo <li> è selezionato da JavaScript in base all'indice dello <option selected>, esattamente come sospettavo. Questo spiega il tuo problema.

La soluzione migliore è quella di report it as a bug per i ragazzi PrimeFaces. Il renderer dovrebbe anche generare lo <option>, oppure il JavaScript dovrebbe selezionare l'opzione in base al valore anziché all'indice.

Nel frattempo, sostituendo la noSelectionOption="true" da itemValue="#{null}", o anche quando itemValue="" JSF è configurato per interpretare i valori presentati stringa vuota come null, dovrebbe risolvere il problema.

+0

è davvero un problema http://code.google.com/p/primefaces/issues/detail?id=4178&colspec=ID%20Stars%20Type%20Status%20Priority%20TargetVersion%20Reporter%20Owner%20Summary&start=100 i trovato dopo aver postato questo problema; grazie –

+0

Prego. – BalusC

Problemi correlati