DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
Renato Pires Vieira
 


País: Brasil
Estado: SC
Cidade: Brusque
Mensagens: 15
 Postado em: 2/5/2011 09:50:46 PM

Boa Noite. Novamente estou postando uma dúvida, pois quando não encontro nada no Google o jeito é perguntar para quem sabe. Estou estudando JSF2 e fazendo um CRUD simples. Gostaria de fazer um botão PESQUISAR para Filtrar por TITULO  (É um cadastro simples de Livros). O Botão até já adicionei. Alguém pode me ajudar? Agradeço desde já. Se tiverem sugestões de melhorias ficarei grato.
LivroDao.java
 
[CODE]
 
package Dao;
import Model.Livro;
import java.util.List;
 
public interface LivroDao {
 
    public void save(Livro livro);
    public Livro getLivro(long id);
    public List<Livro> list();
    public void remove(Livro livro);
    public void update(Livro livro);
}
 
[/CODE]
 
LivroDaoImp.java
 
[CODE]
 
LivroDaoImp.java
package Dao;
import Model.Livro;
import Utils.HibernateUtil;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class LivroDaoImp implements LivroDao {
    public void save(Livro livro) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.save(livro);
        t.commit();
    }
    public Livro getLivro(long id) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        return (Livro) session.load(Livro.class, id);
    }

    public List<Livro> list() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List lista = session.createQuery("from Livro").list();
        t.commit();
        return lista;
    }

    public void remove(Livro livro) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.delete(livro);
        t.commit();
    }
    public void update(Livro livro) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.update(livro);
        t.commit();
    }
}
 
[/CODE]
 
LivroController.java
 
[CODE]
 
package Controller;
import Dao.LivroDao;
import Dao.LivroDaoImp;
import Model.Livro;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
@ManagedBean
@SessionScoped
public class LivroController {
    private Livro livro;
    private DataModel listaLivros;
  
    public DataModel getListarLivros() {
        List<Livro> lista = new LivroDaoImp().list();
        listaLivros = new ListDataModel(lista);
        return listaLivros;
    }
     public Livro getLivro() {
        return livro;
    }
    public void setLivro(Livro livro) {
        this.livro = livro;
    }
    public String prepararAdicionarLivro(){
        livro = new Livro();
        return "gerenciarLivro";
    }
    public String prepararAlterarLivro(){
        livro = (Livro)(listaLivros.getRowData());
        return "gerenciarLivro";
    }
    public String excluirLivro(){
        Livro livroTemp = (Livro)(listaLivros.getRowData());
        LivroDao dao = new LivroDaoImp();
        dao.remove(livroTemp);
        return "gerenciarLivro";
    }
    public String adicionarLivro(){
        LivroDao dao = new LivroDaoImp();
        dao.save(livro);
        return "gerenciarLivro";
       
    }
    public String alterarLivro(){
        LivroDao dao = new LivroDaoImp();
        dao.update(livro);
        return "gerenciarLivro";
    }
    public String limpar() {
       Livro livroParaUpdate = new Livro();
       if (getLivro() != null) {
         livroParaUpdate.setId(getLivro().getId());
      }
     setLivro(livroParaUpdate);
     return "gerenciarLivro";
   }
  
}
 
[/CODE]
 
gerenciarLivro.xhtml
 
[CODE]
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml"
      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>
        <link href="css/theme.css" rel="stylesheet" type="text/css" />
    </h:head>
    <h:body>       
        <h:form id="form">
            <p:panel header="Cadastro de Livros">
                <h:messages errorClass="error"/>
                <h:panelGrid columns="2" id="painel">
                    <h:outputText value="Titulo: *" />
                    <p:inputText required="true" requiredMessage="Campo [Título] Obrigatório" value="#{livroController.livro.titulo}"/>
                    <h:outputText  value="Autor: " />
                    <p:inputText  value="#{livroController.livro.autor}"/>
                    <h:outputText value="Páginas: " />
                    <p:inputText  value="#{livroController.livro.paginas}"/>
                    <h:outputText value="Editora: " />
                    <p:inputText  value="#{livroController.livro.editora}"/>
                    <h:outputText value="ISBN: " />
                    <p:inputText  value="#{livroController.livro.isbn}"/>
                    <h:outputText value="Avaliação: " />
                    <h:selectOneMenu value="#{livroController.livro.avaliacao}">
                        <f:selectItem itemLabel="1" itemValue="1"/>
                        <f:selectItem itemLabel="2" itemValue="2"/>
                        <f:selectItem itemLabel="3" itemValue="3"/>
                        <f:selectItem itemLabel="4" itemValue="4"/>
                        <f:selectItem itemLabel="5" itemValue="5"/>
                    </h:selectOneMenu>
                </h:panelGrid>
                <p:commandButton value="Gravar"  actionListener="#{livroController.adicionarLivro}" ajax="false" />
                <p:commandButton value="Alterar" actionListener="#{livroController.alterarLivro}"   ajax="false" />
               
<p:commandButton value="Filtrar" actionListener="#{livroController.listarLivros}"   ajax="false" />
                <p:commandButton value="Limpar"  actionListener="#{livroController.limpar}"         ajax="false" />
            </p:panel>
            <br/>
            <br/>
        </h:form>
        <h:form>
            <p:outputPanel id="livro">
                <p:dataTable value="#{livroController.listarLivros}" var="livro">
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="Título" />
                        </f:facet>
                        <h:outputText value="#{livro.titulo}" />
                    </p:column>
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="Autor" />
                        </f:facet>
                        <h:outputText value="#{livro.autor}" />
                    </p:column>
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="Operações" />
                        </f:facet>
                        <h:commandButton action="#{livroController.prepararAlterarLivro}" value="Selecionar"/>
                        <h:commandButton action="#{livroController.excluirLivro}"         value="Excluir"/>
                    </p:column>
                </p:dataTable>
            </p:outputPanel>
        </h:form>
    </h:body>
</html>
 
[/CODE]
 
 
 
ROBSON PASSARELLA TEIXEIRA
 

 


País: Brasil
Estado: DF
Cidade: taguatinga
Mensagens: 518
 Postado em: 3/5/2011 01:13:03 AM

Olá Renato
  pelo que vi acho que tenho ideia do que tem errado o seu botão filtrar ele tem que atualizar a tabela abaixo do form???
  se for sugiro o uso de AJAX e o primefaces que está usando tem suporte e remova o atributo actionListener do botão filtrar e use com ajax assim.
<p:commandButton value="Filtrar"
process="@this"  update="livro "/>

com relação a remoção do actionlistener e que ele é normalmente pelo que sei usando em métodos set e não em get.
 e sempre vale a pena da uma olhada no showcase do primefaces para tirar duvidas sobre os componentes disponiveis.

qualquer coisa é so chamar.
att
 robson Passarella
Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 3/5/2011 07:23:06 AM

Só complementando o que o Robson falou, na sua camada de negócio não vi nenhum método que filtre por título ou autor... vc vai ter que implementá-lo e chamar esse método através do seu bean passando os parâmetros que vc quer filtrar.



Att Davi
Renato Pires Vieira
 


País: Brasil
Estado: SC
Cidade: Brusque
Mensagens: 15
 Postado em: 3/5/2011 07:54:27 AM

Obrigado a Todos pelo Retorno.
 
Davi Gomes da Costa  é justamente esta parte que estou precisando de ajuda! Como criar os métodos com Filtro.
 
Abraços
Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 3/5/2011 08:57:58 AM

Pesquise sobre Criteria (Hibernate),
qualquer dúvida mais pontual é só avisar.

Att Davi
Renato Pires Vieira
 


País: Brasil
Estado: SC
Cidade: Brusque
Mensagens: 15
 Postado em: 3/5/2011 07:44:32 PM

Olá Obrigado pelas Dicas.
Encontrei no PRIMEFACES uma função que ajudou muito no caso de Filtro. Porém estou com um problema com o DataModel + PrimeFaces.
 
Quando Digito alguma informação no Titulo o Filtro é realizado com Sucesso. PORÉM:
 
Filtrou Certo
 
[CODE]
 
 <p:column filterBy="#{livro.titulo}" headerText="Título">
        <f:facet name="header">
           <h:outputText value="Título" />
        </f:facet>
        <h:outputText value="#{livro.titulo}" />
   </p:column>
 
[/CODE]
 
Quando Clico em Selecionar para Preencher os Campos dá a Seguinte Mensagem de ERRO:
 
javax.faces.model.NoRowAvailableException
 
 
É como se perdesse o ponteiro da linha.
 
Pois se nao Filtrar e Clicar em SELECIONAR OU EXCLUIR Funcionar normalmente.
 
Alguém tem uma LUZ?
 
Estou pesquisando em Fóruns e no Google.
 
Obrigado
 
Renato
 
 
 
ROBSON PASSARELLA TEIXEIRA
 

 


País: Brasil
Estado: DF
Cidade: taguatinga
Mensagens: 518
 Postado em: 3/5/2011 09:03:20 PM

quando vc clica em selecionar vc pretende fazer o que necessariamente??
e o datatable do primefaces tem o selection para selecionar o objeto

  1. <p:dataTable var="car" value="#{tableBean.carsSmall}"  
  2.                  selection="#{tableBean.selectedCar}" selectionMode="single">

e na managedBean vc cria 1 atributo como no exemplo do Tipo car

private Car selectedCar; 

com os respectivos getters e setters

segue link no showcase do primefaces.

http://www.primefaces.org/showcase/ui/datatableRowSelectionSingle.jsf

qualquer coisa e so chamar.
att
 robson passarella
Renato Pires Vieira
 


País: Brasil
Estado: SC
Cidade: Brusque
Mensagens: 15
 Postado em: 3/5/2011 09:53:42 PM

Olá Robson. Obrigado pelo Retorno.
 
O Objetivo do selecionar é preencher o formulário acima após realizar um Filtro do PrimeFaces.
 
Se utilizar o link Sugerido:
 
 
Fica Assim:
 
[CODE]
 
<p:dataTable value="#{livroController.listarLivros}"
                             var="livro" emptyMessage="Nenhum Registro Encontrado..."
                             selection="#{livroController.livro}" selectionMode="single">
[/CODE/
Qundo clica não preenche o Formulário. Provavelmente falta mais alguma ação.
 
 
No Aguado.
 
Obrigado
Renato Pires Vieira
 


País: Brasil
Estado: SC
Cidade: Brusque
Mensagens: 15
 Postado em: 3/5/2011 10:56:39 PM

Fiz outro TESTE.
 
dataTable
 
[CODE]
 
<p:dataTable value="#{livroController.listarLivros}"
   var="livro" emptyMessage="Nenhum Registro Encontrado..."
   selection="#{livroController.livro}" selectionMode="sngle">
 
[/CODE]
 
Botão Selecionar
 
[CODE]
 
<p:commandButton action="#{livroController.prepararAlterarLivro}" value="Selecionar" update="form"/>
 
[/CODE]
 
O Problema está em minha Classe LivroController pois quando seleciono um item sem Filtrar Funciona Corretamente, porém, se eu Filtrar por Titulo ou Autor e depois clicar em Selecionar simplesmente não
faz nada. É como se perdesse o ponteiro.
 
LivroController.java
 
[CODE]
 
 public String prepararAlterarLivro(){
        livro = (Livro)(listaLivros.getRowData());
        return "gerenciarLivro";
    }
 
[/CODE]
 
 
ROBSON PASSARELLA TEIXEIRA
 

 


País: Brasil
Estado: DF
Cidade: taguatinga
Mensagens: 518
 Postado em: 3/5/2011 11:35:53 PM

teria como enviar uma copia do seu projeto eu poder analisar??? se sim envie para rpateixeira@gmail.com que vou está retornando assim que possivel

att
 robson passarella
Renato Pires Vieira
 


País: Brasil
Estado: SC
Cidade: Brusque
Mensagens: 15
 Postado em: 4/5/2011 07:17:04 AM

Bom dia Robson. Claro, sem problemas. Vou enviar para seu e-mail.
O Objetivo é um cadastro simples de livro à nível de aprendizado.
Estou iniciando com JSF2, por este motivo à dificuldades. Atualmente em meus projetos utilizo javabeans+JSP+Javascript. Resumindo, codigo Javas dentro das paginas e nao existe MVC. Queria aos
poucos converter.
 
Abraços e Obrigado
 
Renato
ROBSON PASSARELLA TEIXEIRA
 

 


País: Brasil
Estado: DF
Cidade: taguatinga
Mensagens: 518
 Postado em: 8/5/2011 06:36:56 PM

Iae renato blz
 desculpe a demora mas ja ta ai o retorno
  na sua classe LivroController no método prepararAlterarLivro veja a unica coisa que fiz abaixo
public String prepararAlterarLivro(){
     //   livro = (Livro)(listaLivros.getRowData());
        return "gerenciarLivro";
    }


acredito que seja isso pois os campos foram totalmente preenchidos.

teste tambem ok??
att
 robson
DYEGO SOUZA DO CARMO
 

 


País: Brasil
Estado: PR
Cidade: xxxxx
Mensagens: 1836
 Postado em: 10/5/2011 01:45:33 PM

Resolvido ? Favor fechar :)
Renato Pires Vieira
 


País: Brasil
Estado: SC
Cidade: Brusque
Mensagens: 15
 Postado em: 12/5/2011 11:41:17 PM

Olá Robson. Obrigado pelo Retorno.
Fiz a alteração conforme solicitado porém o problema continua, sempre apos um Filtro quando clico em selecionar
os campos do Form nao sao preenchidos..
 
[CODE]
 
 public String prepararAlterarLivro(){
    //    livro = (Livro)(listaLivros.getRowData());
        return "gerenciarLivro";
    }
 
[/CODE]
 
ROBSON PASSARELLA TEIXEIRA
 

 


País: Brasil
Estado: DF
Cidade: taguatinga
Mensagens: 518
 Postado em: 13/5/2011 12:25:33 AM

tenta limpar o cache do browser pois eu fiz com o firefox e não com o IE pode-ser isso e você clicou na linha da tabela antes de clicar no bt selecionar??? pois o primefaces pega a linha de seu datatable e seta no atributo livro quando vc clica no botão selecionar mas a linha tem q está ja selecionada.
Renato Pires Vieira
 


País: Brasil
Estado: SC
Cidade: Brusque
Mensagens: 15
 Postado em: 16/5/2011 06:45:25 PM

Boa Noite Robson. Obrigado pelo retorno.
Limpei o Cache e fiz conforme solicitado, e funcinou.
Como você citou, é preciso após FILTRAR clicar na linha e depois selecionar.
 
Muito Obrigado pela Ajuda.
 
Vou continuar meus Estudos.
 
Abraços
 
Renato
 
FECHAR CHAMADO
 
ROBSON PASSARELLA TEIXEIRA
 

 


País: Brasil
Estado: DF
Cidade: taguatinga
Mensagens: 518
 Postado em: 16/5/2011 10:34:05 PM

De nada
estamos aqui para isso.

Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 18/5/2011 07:04:00 AM

Show de bola Renato.

Vc que fecha o chamado, senão me engano fica uma opção em cima ou no fim do seu post, para finalizar o chamado.

Att Davi
DYEGO SOUZA DO CARMO
 

 


País: Brasil
Estado: PR
Cidade: xxxxx
Mensagens: 1836
 Postado em: 25/5/2011 02:13:29 PM

Eu não entendi uma coisa,


Qual o comportamento que está tento e qual o comportamento voce espera ?

Está bem enrrolado ehhehe...

Suarez William
 


País: Ecuador
Estado: 00
Cidade: Milagro
Mensagens: 1
 Postado em: 8/6/2012 12:20:21 PM


Citação:
Boa Noite Robson. Obrigado pelo retorno.
Limpei o Cache e fiz conforme solicitado, e funcinou.

Como você citou, é preciso após FILTRAR clicar na linha e depois selecionar.

 

Muito Obrigado pela Ajuda.

 

Vou continuar meus Estudos.

 

Abraços

 

Renato

 

FECHAR CHAMADO

 



Saludos como limpiaste la cache podrias explicar gracias
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03