Autor
Mensagem
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.
[CODE]
LivroDao.java
package Dao;
import Model.Livro;
import java.util.List;
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);
public Livro getLivro(long id);
public List<Livro> list();
public void remove(Livro livro);
public void update(Livro livro);
}
[/CODE]
LivroDaoImp.java
[CODE]
public class LivroDaoImp implements LivroDao {
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();
}
LivroDaoImp.java
package Dao;
import Model.Livro;
import Utils.HibernateUtil;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
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);
}
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;
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 {
@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;
}
private DataModel listaLivros;
public DataModel getListarLivros() {
List<Livro> lista = new LivroDaoImp().list();
listaLivros = new ListDataModel(lista);
return listaLivros;
}
public Livro getLivro() {
return livro;
}
return livro;
}
public void setLivro(Livro livro) {
this.livro = livro;
}
this.livro = livro;
}
public String prepararAdicionarLivro(){
livro = new Livro();
return "gerenciarLivro";
}
livro = new Livro();
return "gerenciarLivro";
}
public String prepararAlterarLivro(){
livro = (Livro)(listaLivros.getRowData());
return "gerenciarLivro";
}
livro = (Livro)(listaLivros.getRowData());
return "gerenciarLivro";
}
public String excluirLivro(){
Livro livroTemp = (Livro)(listaLivros.getRowData());
LivroDao dao = new LivroDaoImp();
dao.remove(livroTemp);
return "gerenciarLivro";
LivroDao dao = new LivroDaoImp();
dao.remove(livroTemp);
return "gerenciarLivro";
}
public String adicionarLivro(){
LivroDao dao = new LivroDaoImp();
dao.save(livro);
return "gerenciarLivro";
}
dao.save(livro);
return "gerenciarLivro";
}
public String alterarLivro(){
LivroDao dao = new LivroDaoImp();
dao.update(livro);
return "gerenciarLivro";
dao.update(livro);
return "gerenciarLivro";
}
public String limpar() {
Livro livroParaUpdate = new Livro();
if (getLivro() != null) {
livroParaUpdate.setId(getLivro().getId());
}
setLivro(livroParaUpdate);
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" />
<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: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}"/>
<p:inputText required="true" requiredMessage="Campo [Título] Obrigatório" value="#{livroController.livro.titulo}"/>
<h:outputText value="Autor: " />
<p:inputText value="#{livroController.livro.autor}"/>
<p:inputText value="#{livroController.livro.autor}"/>
<h:outputText value="Páginas: " />
<p:inputText value="#{livroController.livro.paginas}"/>
<p:inputText value="#{livroController.livro.paginas}"/>
<h:outputText value="Editora: " />
<p:inputText value="#{livroController.livro.editora}"/>
<p:inputText value="#{livroController.livro.editora}"/>
<h:outputText value="ISBN: " />
<p:inputText value="#{livroController.livro.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">
<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>
<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>
<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>
<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>
</html>
[/CODE]

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
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
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
Olá Obrigado pelas Dicas.
[CODE]
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
<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>
<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
quando vc clica em selecionar vc pretende fazer o que necessariamente??
e o datatable do primefaces tem o selection para selecionar o objeto
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
e o datatable do primefaces tem o selection para selecionar o objeto
- <p:dataTable var="car" value="#{tableBean.carsSmall}"
- 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
Olá Robson. Obrigado pelo Retorno.
[CODE]
O Objetivo do selecionar é preencher o formulário acima após realizar um Filtro do PrimeFaces.
Se utilizar o link Sugerido:
Fica Assim:
<p:dataTable value="#{livroController.listarLivros}"
var="livro" emptyMessage="Nenhum Registro Encontrado..."
selection="#{livroController.livro}" selectionMode="single">
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
Fiz outro TESTE.
[CODE]

dataTable
<p:dataTable value="#{livroController.listarLivros}"
var="livro" emptyMessage="Nenhum Registro Encontrado..."
selection="#{livroController.livro}" selectionMode="sngle">
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";
}
livro = (Livro)(listaLivros.getRowData());
return "gerenciarLivro";
}
[/CODE]

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
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
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
Olá Robson. Obrigado pelo Retorno.
[CODE]

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..
public String prepararAlterarLivro(){
// livro = (Livro)(listaLivros.getRowData());
return "gerenciarLivro";
}
// livro = (Livro)(listaLivros.getRowData());
return "gerenciarLivro";
}
[/CODE]

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.
Citação:
Boa Noite Robson. Obrigado pelo retorno.
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










