2013-01-01 17 views
5

Wystąpił problem z wyborem p:selectOneMenu podczas dodawania f:selectItem.p: selectOneMenu preselects poprzedni element, gdy element noSelectionOption jest obecny

Widok:

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

Model:

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"; 
} 

Wynik:

enter image description here

Pozycja "Walid" powinien zostać wybrany, jednak "Ibrahim" wybiera zamiast. Myślę, że PrimeFaces wybiera pozycję w zależności od jej indeksu na liście, a nie wartości przedmiotu.

Jak to się dzieje i jak mogę to rozwiązać?

Odpowiedz

7

Mogę odtworzyć twój problem. Sprawdziłem kod źródłowy PrimeFaces. Jest to błąd w PrimeFaces SelectOneMenuRenderer, który ujawnia się tylko wtedy, gdy został użyty element z noSelectionOption="true". Renderowanie nie wygeneruje elementu HTML <option> dla tego elementu, ale wygeneruje on dla niego <li> wizualnej listy . Innymi słowy, <select> zawiera w twoim przypadku 4 przedmioty i elementy <ul> 5. Opcja <li> jest wybierana przez JavaScript w oparciu o indeks <option selected>, dokładnie tak, jak podejrzewasz. To wyjaśnia twój problem.

Twój najlepszy zakład to report it as a bug dla facetów z PrimeFaces. Renderer powinien również wygenerować dla niego wartość <option> lub JavaScript powinien wybrać opcję opartą na wartości zamiast na indeksie.

W międzyczasie, zastępując noSelectionOption="true" przez itemValue="#{null}" lub też itemValue="" gdy JSF jest skonfigurowany do interpretowania ciąg pusty przedstawione jako wartości null, powinno rozwiązać problem.

+0

to jest naprawdę problem http://code.google.com/p/primefaces/issues/detail?id=4178&colspec=ID%20Stars%20Type%20Status%20Priority%20TargetVersion%20Reporter%20Owner%20Summary&start=100 ja znalazłem to po opublikowaniu tego problemu; dzięki –

+0

Nie ma za co. – BalusC

Powiązane problemy