H:selectOneMenu

Pessoal,

Fiz o h:selectOneMenu abaixo :

                       <h:selectOneMenu value="#{cadguiaMbean.itemlistaespecialidade}" >
                           <f:selectItems value="#{cadguiaMbean.listaespec()}" />
			</h:selectOneMenu>
******************************* Bean

@ManagedBean
@SessionScoped
public class CadguiaMbean extends ManagedBeanGenerico<Cadguia, CadguiaServico> implements Serializable {
    @EJB
    private CadguiaServico servico;
    
    private Cadguia obj1 = new Cadguia();
    
    private String vuser_autentica;

    private String vnomeprestador;
    
    private Integer itemlistaespecialidade;


    public List<Object> listaespec(){         
             List<Object> objectList =servico.buscaprestadorespecialidade(1);
              return objectList;
          ///return null;
    }    

********************************** DAO

    public List<Object> prestadorespecialidade(Integer vcodigo) {    
        try {       
                String query = "select p.prestespPK.codprest, p.numregistro from Prestesp p ";                
                return (List<Object>) emAux.createQuery(query).getResultList();            
        }
        catch (Throwable ex) {             
                System.err.println("failed.----" + ex);  
                throw new ExceptionInInitializerError(ex);  
        }  
        
        
    
    }

esta dando problema, conforme a imagem em anexo

Cara voçê tem que retornar um para o selectOneMenu.

Olá Evandro!

O problema está acontecendo porque o retorno de seu método é uma lista de Object.

Para resolver este método deve retornar uma lista de SelectItem e retornar no método prestadorespecialidade também um List de SelectItem e alimentar essa lista de forma diferente da qual você está alimentando.

Você pode retornar a lista de Objeto sem problemas, porém com algumas ressalvas.

Vou mostrar um exemplo completo primeiro, assim fica mais fácil explicar depois. Vamos supor que quero mostrar minha lista de pessoas em um selectOneMenu.[code]public class Pessoa{

private String nome;

public String getNome(){
    return nome;
}

public void setNome(String nome){
    this.nome = nome;
}

}[/code]Meu h:selectOneMenu ficaria assim:<h:selectOneMenu value="#{meuManagedBean.pessoa}"> <f:selectItems value="#{meuManagedBean.pessoas}" var="pessoa" itemValue="#{pessoa}" itemLabel="#{pessoa.nome}"/> </h:selectOneMenu> Assim consigo dizer ao componente que dado do meu objeto eu quero que seja exibido, caso eu não especifique um itemLabel ele irá usar o toString da classe, que se não estiver sobrescrito, irá gerar um resultado como o seu.

Se eu não quiser especificar o itemLabel posso simplesmente sobrescrever o toString e fazer com que ele mostre o nome, e minha classe ficará assim:[code]public class Pessoa{

private String nome;

public String getNome(){
    return nome;
}

public void setNome(String nome){
    this.nome = nome;
}

@Override
public String toString(){
    return nome != null ? nome : super.toString();
}

}[/code]Lembre-se também de sobrescrever o método equals do objeto que será colocado no menu

consegui fazer com o componente jsf da seguinte forma :

                       <h:selectOneMenu value="#{cadguiaMbean.itemlistaespecialidade}" >
                           <f:selectItems value="#{cadguiaMbean.listaespec()}" />
			</h:selectOneMenu>

******

    public List<SelectItem> listaespec(){         
             List<Object> objectList =servico.buscaprestadorespecialidade(1);
             
             List<SelectItem> itens = new ArrayList<SelectItem>(objectList.size());
             Iterator iterator = objectList.iterator();
                while(iterator.hasNext()){
                    Object []obj = (Object[])iterator.next();
                    itens.add(new SelectItem((Integer) obj[0],(String) obj[1]));          
                }            
             
              return itens;
          
    }    


gostaria de implementar com o componente do prime
<p:selectOneMenu >
o que mudaria na view ??

Que tal começar a usar um camel case nesse código?