<f:selectItems> recebe um Map ordenado mas na tela mostra desordenado [Resolvido]

segue o codigo pessoal

ordeno no dao
String strSql = "select id_familia,desc_familia from family"
                        + " order by DESC_FAMILIA";

monta a lista certinha de forma ordenada

List<Family> l = pDao.recuperarFamily();

		for (Family f : l) {
			getFamilies().put(f.getDescFamily(), String.valueOf(f.getIdFamily()));
		}

jogo no map ... retorna o map ordenado, porem quando mostra na tela esta desordenado

xhtml

 <p:selectOneMenu id="family"  value="#{pnMB.familyValue}" required="true" style="width:200px">  
                            <f:selectItem itemLabel="Selecione" itemValue="0" noSelectionOption="true" />  
                            <f:selectItems value="#{pnMB.families}"/>  
                        </p:selectOneMenu> 

Mostre onde o Map families é instanciado.

Você está usando um Map ordenado?
Family é Comparable?

Não sei se pode ser o caso, mas me parece que tem um probleminha na forma como o Map é suportado pela tag f:selectItems, talvez seja melhor você dar uma olhada nisso:

https://java.net/jira/browse/JAVASERVERFACES-1808

pessoal agora que vi o L = Dao.recuperarFamily()…traz ordenado

mas na hora do for it, qdo joga no map ele desordena td…alguem sabe o motivo?

[quote=b10machado]pessoal agora que vi o L = Dao.recuperarFamily()…traz ordenado

mas na hora do for it, qdo joga no map ele desordena td…alguem sabe o motivo?[/quote]

Você leu o que escrevemos? Nos diga como é o seu Map. Os mapas não são ordenados a menos que use o mapa certo (um TreeMap, por exemplo) e seu objeto seja Comparable (ou passar um Comparator para o mapa).

Enfim, nos mostre o que está fazendo.

entao eu pensei q como inserir no map de forma ordenada ele ficaria ordenado na hora do chamada…

só faço isso mesmo, recebo a lista e dou o put no map…nao faço mais nd…pensei q assim ele ja viria de forma ordenada…


public class..

private Map<String,String> families = new HashMap<String, String>();

Class(){
 populaComboFamily()

}



get e sets


public void populaComboFamily() {

		List<Family> l = pDao.recuperarFamily();
              

		for (Family f : l) {
			getFamilies().put(f.getDescFamily(), String.valueOf(f.getIdFamily()));
                        
		}
	}


[quote=b10machado]entao eu pensei q como inserir no map de forma ordenada ele ficaria ordenado na hora do chamada…

só faço isso mesmo, recebo a lista e dou o put no map…nao faço mais nd…pensei q assim ele ja viria de forma ordenada…
[/quote]

Isso não acontece. Sugiro que leia o JavaDoc das classes que utiliza. No seu caso, por exemplo, você pode usar um TreeMap no lugar do HashMap.

usei o TreeMap<String, String>();

e funcionou corretamente…Obrigado

[quote=b10machado]usei o TreeMap<String, String>();

e funcionou corretamente…Obrigado[/quote]
Poderia, também, usar o LinkedHashMap<K, V>, que utiliza uma estrutura de lista ordenada para criar o mapa, baseado em uma regra de código hash.

tendi, vlw pela ajuda!!!