Bom dia Pessoal !
Estou com o seguinte problema tenho uma DataTable que mostra os dados do meu banco porém só funciona se eu adicionar um commandbutton com a ação de “mostrar dados” como faço para esses dados serem carregados automaticamente ao carregar a página sem ter que apertar esse botão?
Obs. estou ultilizando : JSF, PrimeFaces, Hibernate no server Tomcat e IDE Eclipse
Se você postar seu código fica mais fácil de ajudar. Mas pra isso não tem segredo, basta no seu managed bean você ter um atributo com sua lista e seus respectivos getters e setters. No próprio get da lista você poderia populá-la com os dados do banco. Como nos exemplos abaixo:
packagemodelo;importjava.io.Serializable;importjavax.persistence.*;/** * The persistent class for the contato database table. * */@Entity@Table(name="contato")publicclassContatoimplementsSerializable{privatestaticfinallongserialVersionUID=1L;@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(unique=true,nullable=false)privateintcodigo;@Column(length=45)privateStringnome;@Column(length=45)privateStringtelefone;publicContato(){}publicintgetCodigo(){returnthis.codigo;}publicvoidsetCodigo(intcodigo){this.codigo=codigo;}publicStringgetNome(){returnthis.nome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetTelefone(){returnthis.telefone;}publicvoidsetTelefone(Stringtelefone){this.telefone=telefone;}}
ManagedBen
ackagebean;importjava.util.List;importjavax.persistence.EntityManager;importjavax.persistence.EntityManagerFactory;importjavax.persistence.Persistence;importmodelo.Contato;publicclassContatoBean{ContatonovoContato=newContato();privateList<Contato>contatos;privateContatoContatoSelecionado;publicvoidcadastra(){EntityManagerFactoryfactory=Persistence.createEntityManagerFactory("Basico");EntityManagermanager=factory.createEntityManager();manager.persist(novoContato);System.out.println("Salvando contato...");manager.getTransaction().begin();manager.getTransaction().commit();factory.close();System.out.println("Contato cadastrado!!!!");}publicvoidconsulta(){EntityManagerFactoryfactory=Persistence.createEntityManagerFactory("Basico");EntityManagermanager=factory.createEntityManager();javax.persistence.Queryquery=manager.createQuery("SELECT e FROM Contato e");contatos=query.getResultList();}publicContatogetNovoContato(){returnnovoContato;}publicvoidsetNovoContato(ContatonovoContato){this.novoContato=novoContato;}publicList<Contato>getContatos(){returncontatos;}publicvoidsetContatos(List<Contato>contatos){this.contatos=contatos;}publicContatogetContatoSelecionado(){returnContatoSelecionado;}publicvoidsetContatoSelecionado(ContatocontatoSelecionado){ContatoSelecionado=contatoSelecionado;}}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:p="http://primefaces.prime.com.tr/ui"><h:head></h:head><h:body><h:formtarget="#{contatoBean.contatos}"><h:panelGridcolumns="2"><h:outputTextvalue="Nome:"/><h:inputTextvalue="#{contatoBean.novoContato.nome}"/><h:outputTextvalue="Telefone:"/><h:inputTextvalue="#{contatoBean.novoContato.telefone}"/><h:commandButtonaction="#{contatoBean.cadastra}"value="Cadastrar"/></h:panelGrid></h:form><h:formprependId="false"><h:commandButtonaction="#{contatoBean.consulta}"value="Atualizar"/><p:dataTablevar="c"value="#{contatoBean.contatos}"paginator="true"rows="10"><p:column><f:facetname="header"><h:outputTextvalue="Nome"/></f:facet><h:outputTextvalue="#{c.nome}"/></p:column><p:column><f:facetname="header"><h:outputTextvalue="Telefone"/></f:facet><h:outputTextvalue="#{c.telefone}"/></p:column><p:columnstyle="width:32px"><p:commandButtonupdate="display"oncomplete="cDialog.show()"image="ui-icon ui-icon-search"><f:setPropertyActionListenervalue="#{c}"target="#{contatoBean.contatoSelecionado}"/></p:commandButton></p:column></p:dataTable><p:dialogheader="Detalhe do Contato"widgetVar="cDialog"resizable="false"width="200"showEffect="explode"hideEffect="explode"><h:panelGridid="display"columns="2"cellpadding="4"><f:facetname="header"><p:graphicImagevalue="/images/cars/#{tableBean.selectedCar.manufacturer}.jpg"/></f:facet><h:outputTextvalue="Nome:"/><h:outputTextvalue="#{contatoBean.contatoSelecionado.nome}"/><h:outputTextvalue="Telefone:"/><h:outputTextvalue="#{contatoBean.contatoSelecionado.telefone}"/></h:panelGrid></p:dialog></h:form></h:body></html>
fredericomaia10
Ainda acertei o projeto hein, uma agenda de contatos! hehe
Pois é, seria legal você separar essas lógicas, separar a camada de persistência (JPA) da visão (JSF) por exemplo. Mas isso não vem ao caso agora.
De acordo com seu código você poderia alterar o seus métodos getContatos e consulta para algo como:
publicList<Contato>consulta(){EntityManagerFactoryfactory=Persistence.createEntityManagerFactory("Basico"); EntityManagermanager=factory.createEntityManager(); javax.persistence.Queryquery=manager.createQuery("SELECT e FROM Contato e"); returnquery.getResultList();
}
publicList<Contato>getContatos(){if(contatos==null){
contatos=consulta();}
returncontatos;
}
Se você está usando Primefaces está usando JSF 2 correto? Portanto não há necessidade do facesconfig.xml. Basta anotar o seu bean com @ManagedBean.
Ocdigital
Perfeito!!! Valeu Funfou que uma beleza !
Ocdigital
Aproveitando o Tópico …
como faço para setar o valor do objeto que desejo deletar do banco a partir de um botão no jsf