selectOneMenu puxando do Banco duplicado

1 resposta
fernandaleite

Olá pessoal,
estava com um problema para colocar o selectOneMenu vinculado ao Banco de dados, porém um outro post aqui me ajudou com isso, mas agora ele mostra os dados duplicados no select da pagina. Deve ser algum detalhe que eu não estou reparando e já to maior tempão tentando resolver isso.. é projeto da faculdade..

public class ManagedBean {

    private List<SelectItem> siglas = new ArrayList<SelectItem>();

    public List<SelectItem> getSiglas() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Query query = session.createQuery("from Uf");
        List<Uf> listaUf = query.list();

        for (Uf u : listaUf){
            SelectItem s = new SelectItem();
            s.setValue(u.getIduf());
            s.setLabel(u.getUf());
            siglas.add(s);
        }
        return siglas;
    }

na pagina jsp:

<h:outputLabel value="UF: " for="uf"/>
<h:selectOneMenu value="#{controle.cliente.endereco.uf}" id="uf" required="true" requiredMessage="Por favor, informe um estado!">
         <f:selectItems value="#{controle.siglas}"/>
</h:selectOneMenu>
package entity;
import javax.persistence.*;

@Entity
@Table(name="uf")
public class Uf {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="iduf")
    private Integer iduf;

    @Column(name="nomeuf", length=2, nullable=false)
    private String uf;

    public Uf() {
    }

//atributos guetters e setters
}

banco de dados: mysql

create table uf(
iduf        integer     auto_increment      primary key,
nomeuf      char(2)     not null        unique
);

insert into uf (nomeuf) values ('AC');
insert into uf (nomeuf) values ('AL');
insert into uf (nomeuf) values ('AP');
insert into uf (nomeuf) values ('AM');
insert into uf (nomeuf) values ('BA');
insert into uf (nomeuf) values ('CE'); // e ate o ultimo
ve se ja é o suficiente pra me ajudarem.... Obrigada desde já :!:

1 Resposta

H

Olá. Já resolveu o seu problema? Se ainda não, tente algo assim:

No seu managed bean:

public class ManagedBean {

    private List&lt;SelectItem&gt; siglas = new ArrayList&lt;SelectItem&gt;();

    
    public ManagedBean(){
         carregarSiglas();
    }

    public void carregarSiglas() {
   
        siglas = new ArrayList&lt;SelectItem&gt;();
   
        Session session = HibernateUtil.getSessionFactory().openSession();
       
        Query query = session.createQuery("from Uf");
       
        List&lt;Uf&gt; listaUf = query.list();

        for (Uf u : listaUf){
             siglas.add(new SelectItem(u, uf.getUf()));       
        }
        
    }

    public List&lt;SelectItem&gt; getSiglas() {
         return siglas;
    }

    public void setSiglas(List&lt;SelectItem&gt; siglas){
         this.siglas = siglas;
    }
}

Na página:

&lt;h:outputLabel value="UF: " for="uf"/&gt;
&lt;h:selectOneMenu value="#{controle.cliente.endereco.uf}" id="uf" converter="objetoConverter"  required="true" requiredMessage="Por favor, informe um estado!"&gt;
         &lt;f:selectItems value="#{controle.siglas}"/&gt;
&lt;/h:selectOneMenu&gt;

Adicionar o trecho abaixo no faces-config:

&lt;converter&gt;
	&lt;converter-id&gt;objetoConverter&lt;/converter-id&gt;
	&lt;converter-class&gt;nomedopacote.ObjetoConverter&lt;/converter-class&gt;
&lt;/converter&gt;

Espero ter ajudado.

Criado 24 de outubro de 2010
Ultima resposta 25 de out. de 2010
Respostas 1
Participantes 2