Estou desenvolvendo um CRUD de usuários em JSF e usando Hibernate e estou com algumas dificuldades. Eu não sei como fazer uma pesquisa, aonde tenha uma caixa de texto e um botão que carregue o resultado buscando pelo nome do usuário.
Pergunto: Eu posso usar parâmetros nos métodos que vou chamar nas páginas jsf? Os que eu tentei usar não deram certo…
Eu tentei fazer qualquer coisa só pra ver cm se comportava (eu tinha que iniciar de alguma forma ) e ficou assim:
publicListbuscarClientePorNome(){
Queryquery=manager.createQuery("select u from Usuario u where nome ="+user.getNome()); //cm fzr ele pegar o nome escrito na caixa de texto??lista=(List<Usuario>)query.getResultList();if(lista.isEmpty()){
returnnull;}
returnlista;}
<h:form><tablewidth="500"align="center"><tr><tdcolspan="2"align="right"><h:outputTextvalue="Informe o nome do usuário a ser pesquisado"/></td></tr><tr><tdalign="right"><h:inputTextid="nome"/></td><tdalign="left"><h:commandButtonvalue="Pesquisar"action="#{usuarioBeans.buscarClientePorNome}"><f:setPropertyActionListenervalue="#{usuarioBeans.user.nome}"target="#{usuarioBeans.user}"/></h:commandButton></td></tr></table></h:form>
Eu mexi com JSF a muito tempo atrás, não lembro bem, mas acho que você seta seu bean no campo que deseja pegar o parâmetro:
<tdalign="right"><h:inputTextvalue="#{usuarioBean.user.nome}"/></td>//enométodopublicListbuscarClientePorNome(Stringnome){Queryquery=manager.createQuery("selectufromUsuariouwherenomelike:nome"); //cm fzr ele pegar o nome escrito na caixa de texto?? query.setParameter("nome",nome);lista=(List<Usuario>)query.getResultList();if(lista.isEmpty()){returnnull;}returnlista;}
A
ArianeRebellato
retorna este erro:
/buscar.xhtml @36,114 value="#{usuarioBean.user.nome}": Target Unreachable, identifier ‘usuarioBean’ resolved to null
Na página jsf eu não passo mesmo parâmetro quando chamo o método, apesar dele existir??
Dicas: use o conceito de tabless em inves de fazer pagina com table e acostume colocar id em todos os componentes.
t+
E
edudebom
Você precisa criar o ManagedBean. Por exemplo:
publicclassUsuarioMB{Usuariouser=newUsuario();}
Supondo que sua classe Usuario tenha o atributo nome você faria assim:
<h:inputText value="#{usuarioMB.user.nome}" />
A
ArianeRebellato
Eu não estou conseguindo…eu tenho que criar uma outra classe, é isso? e o que vai ter nela?? qual a diferença da minha UsuarioBean? eu tenho um objeto de Usuarios nela já.
Qual a diferença de
<h:inputText value="#{usuarioMB.user.nome}" />
e de
<h:inputText value="#{usuarioBean.user.nome}" />
??
Obrigada
E
edudebom
Não precisa criar outra então. Poste o código da usuarioBean.
R
romarcio
ArianeRebellato:
Eu não estou conseguindo…eu tenho que criar uma outra classe, é isso? e o que vai ter nela?? qual a diferença da minha UsuarioBean? eu tenho um objeto de Usuarios nela já.
Qual a diferença de
<h:inputText value="#{usuarioMB.user.nome}" />
e de
<h:inputText value="#{usuarioBean.user.nome}" />
??
Obrigada
Nenhuma, apenas o nome da classe. Acho que o colega só quis exemplificar de outra forma como você precisa fazer.
A
ArianeRebellato
Este método para Buscar está correto?
public List buscarClientePorNome(String nome) {
Query query = manager.createQuery("select u from Usuario u where nome like :nome");
query.setParameter("nome", nome);
lista = (List<Usuario>) query.getResultList();
if (lista.isEmpty()) {
return null;
}
return lista;
}
O erro que retorna ao clicar no pesquisar é: /buscar.xhtml @36,114 value="#{usuarioBean.user.nome}": Target Unreachable, identifier ‘usuarioBean’ resolved to null
Desculpa, eu nem tinha visto as respostas…O meu método de listar está funcionando…eu consigo inserir e excluir tbm do banco…travei na busca mesmo pelo nome…eu vejo que ta faltando alguma coisa e não consigo saber exatamente o que…
R
romarcio
Você precisa postar sua classe UsuarioBean e seu arquivo de configuração do JSF (faces-config.xml), dai fica mais fácil ajudar.
A
ArianeRebellato
O meu projeto não tem este arquivo…isso é possível?? rsrs
A
ArianeRebellato
packageBean;importjava.util.List;importjava.util.TimeZone;importjavax.faces.bean.ManagedBean;importjavax.persistence.EntityManager;importjavax.persistence.Query;importmodelo.Usuario;importutil.DAO;importutil.HibernateUtil;@ManagedBean//gera os newpublicclassUsuarioBean{EntityManagermanager=HibernateUtil.getManager();privateUsuariouser=newUsuario();privateDAOdao=newDAO();privateTimeZonetz=TimeZone.getTimeZone("America/Sao_Paulo");List<Usuario>lista;publicTimeZonegetTz(){returntz;}publicvoidsetTz(TimeZonetz){this.tz=tz;}publicUsuariogetUser(){returnuser;}publicvoidsetUser(Usuariouser){this.user=user;}publicvoidnewInstance(){user=newUsuario();}publicvoidinserirUsuario(){manager.getTransaction().begin();manager.persist(user);manager.getTransaction().commit();user=newUsuario();}publicListlistarTodosUsuarios(){Queryquery=manager.createQuery("select u from Usuario u");lista=(List<Usuario>)query.getResultList();if(lista.isEmpty()){}returnlista;}publicListgetUsuarios(){returnlistarTodosUsuarios();}publicStringremove(){try{manager.getTransaction().begin();manager.remove(user);manager.getTransaction().commit();newInstance();lista=null;return"sucesso";}catch(Exceptione){e.printStackTrace();return"falhou";}}publicStringupdate(){try{manager.getTransaction().begin();manager.merge(user);manager.getTransaction().commit();newInstance();return"sucesso";}catch(Exceptione){e.printStackTrace();return"falhou";}}publicListbuscarClientePorNome(Stringnome){Queryquery=manager.createQuery("select u from Usuario u where nome like :nome");query.setParameter("nome",nome);lista=(List<Usuario>)query.getResultList();if(lista.isEmpty()){returnnull;}returnlista;}}
R
romarcio
Essa anotação: @ManagedBean
substitui o arquivo.
Tenta fazer assim no método de pesquisa:
publicListbuscarClientePorNome(){Queryquery=manager.createQuery("selectufromUsuariouwherenomelike:nome"); query.setParameter("nome", user.getNome()); lista = (List<Usuario>) query.getResultList(); if (lista.isEmpty()) { return null; } return lista; } //se não funcionar tenta assim:private String nome; //gerar o get/setpublic List buscarClientePorNome() { Query query = manager.createQuery("selectufromUsuariouwherenomelike:nome"); query.setParameter("nome", nome); lista = (List<Usuario>) query.getResultList(); if (lista.isEmpty()) { return null; } return lista; } //nesse segundo caso deixe na página assim:<h:inputText value="#{usuarioBean.nome}"/>
A
ArianeRebellato
Agora qualquer ação que eu tento fazer tá dando este erro…e parou de listar!!! e eu não fiz nada…pq está acontecendo isso??
/buscar.xhtml @36,114 value="#{usuarioBean.user.nome}": Target Unreachable, identifier ‘usuarioBean’ resolved to null
A
ArianeRebellato
Deu certooooo! Eu tinha refatorado um arquivo, por isso tava dando erro..mas engraçado o netbeans não ter atualizado o projeto td né? :evil:
ficou assim:
publicListbuscarClientePorNome(){
Queryquery=manager.createQuery("select u from Usuario u where nome like :nome");query.setParameter("nome",nome);lista=(List<Usuario>)query.getResultList();if(lista.isEmpty()){
returnnull;}
returnlista;}
publicListgetBuscaUsuarios(){
returnbuscarClientePorNome();}
returnlista;}
e no jsf:
<?xml version='1.0' encoding='UTF-8' ?><!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:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"><h:head><linkrel="stylesheet"type="text/css"href="estilo.css"/><title>Controle de Usuários</title></h:head><h:body><divid="geral"><divid="content"><divid="cabecalho"><divid="intCab">Controle de Usuários</div><!--fim intCab--><br/><divid="subTitulo"><h:form>Você está em: <h:outputLinkvalue="index.xhtml"styleClass="umlink"><f:verbatim>Home</f:verbatim></h:outputLink> >> <h:outputLinkvalue="buscar.xhtml"styleClass="doislink"><f:verbatim>Buscar</f:verbatim></h:outputLink></h:form></div><!--fim subtitulo--></div><!--fim cabecalho--><divid="conteudo"><divid="contPrincipal"><h:form><tablewidth="500"align="center"><tr><tdcolspan="2"align="right"><h:outputTextvalue="Informe o nome do usuário a ser pesquisado"/></td></tr><tr><tdalign="right"><h:inputTextvalue="#{usuarioBeans.nome}"/></td><tdalign="left"><h:commandButtonvalue="Pesquisar"action="#{usuarioBeans.buscarClientePorNome}"></h:commandButton></td></tr></table><br/><br/><br/><!--Início tabela de lista--><h:dataTablevalue="#{usuarioBeans.buscaUsuarios}"var="usuario"styleClass="orders"headerClass="ordersHeader"columnClasses="oddColumn"rowClasses=" eveRow, oddRow"><h:column><f:facetname="header">
Id
</f:facet>
#{usuario.id}
</h:column><h:column><f:facetname="header">
Nome
</f:facet>
#{usuario.nome}
</h:column><h:column><f:facetname="header">
Login
</f:facet>
#{usuario.login}
</h:column><h:column><f:facetname="header">
Senha
</f:facet>
#{usuario.senha}
</h:column><h:column><f:facetname="header">
Data de nascimento
</f:facet>
#{usuario.datanascimento}
</h:column><h:column><f:facetname="header">
Observações
</f:facet>
#{usuario.observacoes}
</h:column></h:dataTable><!--Fim tabela de lista--></h:form></div><!--fim contPrincipal--><divid="lateral"><br/><br/><br/><f:view><h:form><h:outputLinkvalue="index.xhtml"styleClass="link"><f:verbatim>Home</f:verbatim></h:outputLink><br/><br/><h:outputLinkvalue="inserir.xhtml"styleClass="link"><f:verbatim>Inserir</f:verbatim></h:outputLink><br/><br/><h:outputLinkvalue="buscar.jsf"styleClass="link"><f:verbatim>Buscar</f:verbatim></h:outputLink><br/><br/><h:outputLinkvalue="listar.xhtml"styleClass="link"><f:verbatim>Listar</f:verbatim></h:outputLink><br/><br/><h:outputLinkvalue="atualizar.xhtml"styleClass="link"><f:verbatim>Atualizar</f:verbatim></h:outputLink><br/><br/><h:outputLinkvalue="remover.xhtml"styleClass="link"><f:verbatim>Remover</f:verbatim></h:outputLink></h:form></f:view></div><!--fim lateral--></div><!--fim conteudo--><divid="rodape"><p>IFSul - 2011/2</p><p>TAP - Tópicos Avançados em Programação</p><p>Ariane Rebellato</p><p> </p></div><!--fim rodape--></div><!--fim content--></div><!--fim geral--></h:body></html>
Obrigada pela força!!
Ainda vou implementar o atualizar, então, se eu precisar me ajudemm!! ehehe
Abração